Вспомогательные функции

library(Rssa)
Предупреждение: пакет ‘Rssa’ был собран под R версии 4.2.3
Загрузка требуемого пакета: svd
Предупреждение: пакет ‘svd’ был собран под R версии 4.2.3
Загрузка требуемого пакета: forecast
Предупреждение: пакет ‘forecast’ был собран под R версии 4.2.3

Присоединяю пакет: ‘Rssa’

Следующий объект скрыт от ‘package:stats’:

    decompose
library(signal)
Предупреждение: пакет ‘signal’ был собран под R версии 4.2.3

Присоединяю пакет: ‘signal’

Следующий объект скрыт от ‘package:Rssa’:

    roots

Следующие объекты скрыты от ‘package:stats’:

    filter, poly
library(gsignal)
Предупреждение: пакет ‘gsignal’ был собран под R версии 4.2.3
Registered S3 methods overwritten by 'gsignal':
  method         from  
  plot.grpdelay  signal
  plot.specgram  signal
  print.freqz    signal
  print.grpdelay signal
  print.impz     signal
  print.specgram signal

Присоединяю пакет: ‘gsignal’

Следующий объект скрыт ‘.GlobalEnv’:

    dftmtx

Следующий объект скрыт от ‘package:signal’:

    Arma, as.Arma, as.Zpg, bartlett, bilinear, blackman, boxcar, butter, buttord, cheb1ord, chebwin, cheby1, cheby2,
    chirp, conv, decimate, ellip, ellipord, fftfilt, filter, filtfilt, fir1, fir2, flattopwin, freqs, freqs_plot,
    freqz, freqz_plot, gausswin, grpdelay, hamming, hanning, ifft, impz, interp, kaiser, kaiserord, levinson, Ma,
    medfilt1, poly, remez, resample, sftrans, sgolay, sgolayfilt, specgram, triang, unwrap, Zpg, zplane

Следующие объекты скрыты от ‘package:stats’:

    filter, gaussian, poly
source("eossa_new.R")


dftmtx <- function(n) {
  y <- stats::mvfft(diag(1, n))
  y
}

diag_averaging <- function(A){
  B <- A[nrow(A):1, ] |> Re()
  lapply(split(B, -(row(B) - col(B)) ), mean) |> as.numeric()
}

shift_vector <- function(vec) {
  last_element <- tail(vec, 1)
  vec <- vec[-length(vec)]
  shifted_vec <- c(last_element, vec)
  return(shifted_vec)
}

extend <- function(x, H){
  # Вычисление коэффициентов AR модели для дифференцированного ряда
  N <- length(x)
  p <- floor(N / 3)
  dx <- diff(x)
  # A <- ar(dx, order.max = p, method = "yule-walker")$ar
  A <- aryule(dx, p)$a
  
  # Правое расширение
  y <- x
  dy <- diff(y)
  er <- signal::filter(A, 1, dy)
  dy <- signal::filter(1, A, c(er, rep(0, H)))
  y <- y[1] + c(0, cumsum(dy))
  
  # Левое расширение
  y <- rev(y)
  dy <- diff(y)
  er <- signal::filter(A,1,dy)
  dy <- signal::filter(1,A,c(er, rep(0, H)))
  y <- y[1] + c(0, cumsum(dy))
  
  # Расширенный ряд
  xe <- rev(y)
  
  # Вывод результатов
  xe 
}

CiSSA

Подаётся на вход временной ряд, длина окна (если её нет, то она равна длине ряда + 1 пополам) и информация о том, нужно ли расширить ряд. Расширять ряд стоит при стохастическом тренде (Autoregressive extension (default). It is indicated for stationary and stochastic trend time series as well). Реализовано только Autoregressive extension.


На выходе список выдаётся список list(t_series, importance).
t_series — матрица, по столбцам которой располагаются временные ряды, отвечающие за частоты (i-1)/L, где i — номер столбца, L — длина окна.
importance — вектор, отвечающий за значимость i-ого временного ряда в разлолжении. Чем больше значение, тем больший вклад внёс i-тый временной ряд.

circulant_SSA <- function(ts, L = NULL, extend_flag = FALSE){
  time_series <- ts
  # Construct trajectory matrix
  N <- length(time_series)
  if (is.null(L)){
    L <- (N + 1)%/%2
  }
  # Проверка на расширения ряда
  if (extend_flag == FALSE){
    H <- 0
    time_series <- ts
  }
  else{
    H <- L
    time_series <- extend(ts, H)
  }
  
  X <- hankel(time_series, L)
  
  # Number of symmetric frequency pairs around 1/2
  if (L %% 2) {
    nf2 <- (L + 1) / 2 - 1
  } else {
    nf2 <- L / 2 - 1
  }
  
  # Number of frequencies <= 1/2
  nft <- nf2 + abs((L %% 2) - 2)
  
  # Decomposition
  # Estimate autocovariance     OK
  autocov <- numeric(L)
  for (m in 0:(L-1)){
    autocov[[m+1]] <- sum(time_series[1:(N-m)] * time_series[(1+m):N]) / (N-m)
  }
  
  # First row of circulant matrix
  circ_first_row <- numeric(L)
  for (m in 0:(L-1)){
    circ_first_row[[m+1]] <- (L-m)/L * autocov[[m+1]] + (m)/L * autocov[[L-m]]
  }
  
  # Build circulant matrix
  S_C <- matrix(circ_first_row, nrow = 1)
  shifted_vector <- circ_first_row
  for (i in 2:(L)) {
    shifted_vector <- shift_vector(shifted_vector)
    # S_C <- rbind(S_C, as.vector(shifted_vector))
    S_C <- rbind(as.vector(shifted_vector), S_C)
  }
  
  # Eigenvectors of circulant matrix (unitary base)
  U <- dftmtx(L)/sqrt(L)
  
  # Real eigenvectors (orthonormal base)
  U[, 1] <- Re(U[, 1])
  for (k in 1:nf2) {
    u_k <- U[, k + 1]
    U[, k + 1] <- sqrt(2) * Re(u_k)
    U[, L + 2 - (k + 1)] <- sqrt(2) * Im(u_k)
  }
  if (L %% 2 != 0) {
    U[, nft] <- Re(U[, nft])
  }
  
  # Eigenvalues of circulant matrix: estimated power spectral density
  psd <- abs(diag(t(U) %*% S_C %*% U))
  
  # Principal components
  W <- t(U) %*% X
  # Reconstruction
  # Elementary reconstructed series
  R <- matrix(0, nrow = N+2*H, ncol = L)
  for (k in 1:L) {
    R[, k] <- U[ ,k] %*% t(W[k, ]) |> diag_averaging()
  }
  
  # Grouping by frequency
  # Elementary reconstructed series by frequency
  Z <- matrix(0, nrow = N+2*H, ncol = nft)
  Z[, 1] <- R[, 1]
  # Importance of component
  imp <- numeric(nft)
  lambda_sm <- sum(psd)
  imp[1] <- psd[1]/lambda_sm
  for (k in 1:nf2) {
    Z[, k + 1] <- R[, k + 1] + R[, L + 2 - (k + 1)]
    imp[k+1] <- (psd[k+1] + psd[ L + 2 - (k + 1)])/lambda_sm
  }
  if (L %% 2 != 0) {
    Z[, nft] <- R[, nft]
    imp[nft] <- psd[nft] / lambda_sm
  }
  
  list(t_series = Z[(H+1):(N+H),],
       importance = imp,
       freq = (0:(length(imp) -1))/L
       )
}
# groups - list of frequencies
grouping_cissa <- function(cissa_res, groups){
  freq <- cissa_res$freq
  t_series <- cissa_res$t_series
  
  residuals <- 0
  result <- setNames(as.list(rep(0, length(groups))), names(groups))
  for (i in 1:length(cissa_res$freq)){
    flag <- FALSE
    for (name in names(groups)){
      if (groups[[name]][1] <= freq[i] & freq[i] <= groups[[name]][2]){
        flag <- TRUE
        result[[name]] <- result[[name]] + t_series[, i]
      }
    }
    
    if (flag == FALSE){
      residuals <- residuals + t_series[, i]
    }
  }
  
  result[["residuals"]] <- residuals
  result
}
generate_ts <- function(func, n=1e3, ...){
  1:n |> func(...) |> ts()
}

f_cos <- function(x, A = 1, omega = 1/4, phi = 0){
  f_exp_mod_harm_series(x, A, alpha = 0, omega = omega, phi = phi)
}

f_sin <- function(x, A = 1, omega = 1/4, phi = 3*pi/2){
  f_exp_mod_harm_series(x, A, alpha = 0, omega = omega, phi = phi)
}

f_exp <- function(x, A = 1, alpha = 1){
  A * exp(alpha * x)
}

f_exp_cos <- function(x, A = 1, alpha = 1, omega = 1/4, phi = 0){
  f_exp_mod_harm_series(x, A, alpha, omega, phi)
}

f_const <- function(x, C = 0){
  rep(C, length(x))
}

f_exp_mod_harm_series <- function(x, A = 1, alpha = 1, omega = 1/4, phi = 0){
  A*exp(alpha*x)*cos(2*pi*omega*x + phi)
}

f_linear <- function(x, a = 1, b = 0){
  a*x + b
}
mse <- function(f_true, f_reconstructed){
   mean((f_true - f_reconstructed)^2) 
}

Ошибка при Lw in N, Kw not in N

n <- 96*2+5
L <- 96
f_sum <- function(x){
  f_const(x, C = 1) + f_cos(x, omega = 1/12) 
}


f_const |> generate_ts(n, C = 1) |>
  plot(col = "green", ylim = c(-1, 2), ylab = "f_n")
f_cos |>
  generate_ts(n, omega = 1/12) |>
  lines(col="green")
f_sum |> generate_ts(n) |> lines(lwd = 3, col='red')
f_n <- f_sum(1:n)



c <- circulant_SSA(f_n, L = 96, extend_flag = FALSE)
r <- grouping_cissa(c,
               groups = list(
                 trend = c(0, 1/100),
                 sesonal = c(1/99, 1/10)
               )
               )

f_C <- f_const |> generate_ts(n, C = 1)
f_c <- f_cos |> generate_ts(n, omega = 1/12)
print("Ошибки при CiSSA")
[1] "Ошибки при CiSSA"
print(paste("Ошибка при вычислении C = 1: ", mse(f_C, r$trend) |> format(scientific = TRUE, digits = 2) ))
[1] "Ошибка при вычислении C = 1:  3.2e-31"
print(paste("Ошибка при вычислении cos(pi/12): ", mse(f_c, r$sesonal) |> format(scientific = TRUE, digits = 2) ))
[1] "Ошибка при вычислении cos(pi/12):  3.6e-30"
lines(1:n, r$trend, col="blue")
lines(1:n, r$sesonal, col="blue")


f_const |> generate_ts(n, C = 1) |>
  plot(col = "green", ylim = c(-1, 2), ylab = "f_n")
f_cos |>
  generate_ts(n, omega = 1/12) |>
  lines(col="green")
f_sum |> generate_ts(n) |> lines(lwd = 3, col='red')
f_n <- f_sum(1:n)

s <- ssa(f_n, L = 96)
r <- reconstruct(s, groups=list(
  trend = 1,
  sesonal = 2:3
))


print("Ошибки при SSA")
[1] "Ошибки при SSA"
print(paste("Ошибка при вычислении C = 1: ", mse(f_C, r$trend) |> format(scientific = TRUE, digits = 2)  ))
[1] "Ошибка при вычислении C = 1:  9.6e-05"
print(paste("Ошибка при вычислении cos(pi/12): ", mse(f_c, r$sesonal) |> format(scientific = TRUE, digits = 2)))
[1] "Ошибка при вычислении cos(pi/12):  9.6e-05"
lines(1:n, r$trend)
lines(1:n, r$sesonal)

Проверка разделимости непериодических компонент + автогруппировка SSA

n <- 96*2-1
L <- 96

C <- 1
omega_cs <- 1/12
omega_sn <- 1/24
a <- 1/100
f_sum <- function(x){
  f_const(x, C = C) +
    f_cos(x, omega = omega_cs) +
    f_exp(x, a = a) +
    f_sin(x, omega = omega_sn)
}


f_C <- f_const |> generate_ts(n, C = C)
f_c <- f_cos |> generate_ts(n, omega = omega_cs)
f_s <- f_sin |> generate_ts(n, omega = omega_sn)
f_e <- f_exp |> generate_ts(n, a = a)

f_n <- f_sum(1:n)

library(xtable)
Предупреждение: пакет ‘xtable’ был собран под R версии 4.2.3
# Шаг 2: Создание примера данных
data <- data.frame(
  Метод = c("SSA", "CiSSA"),
  e_err = c(20, 20),
  c_err = c(23, 35),
  ec_err = c(20, 20),
  sin_err = c (20, 20),
  cos_err = c(1, 1)
)


# Отрисовка ряда f_n
plot(f_n, type = "l", lwd = 3, col = 'red', ylim = c(-2, 10),
     xlab = "Время", ylab = "Значения ряда", main = "Разложение временного ряда")

# Добавление отдельных компонентов (f_C, f_c, f_e)
lines(f_C, col = "blue")  # Компонент f_C
lines(f_c, col = "blue")  # Компонент f_c
lines(f_e, col = "blue")  # Компонент f_e
lines(f_s, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)









c <- circulant_SSA(f_n, L = L, extend_flag = TRUE)
# r <- c$t_series
r <- grouping_cissa(c,
                    groups = list(
                      # trend = c(0, 1/100),
                      trend = c(0, 1/1000),
                      sesonal_cos = c(1/14, 1/10),
                      sesonal_sin = c(1/26, 1/23)
                    ))

data$cos_err[2] <- mse(f_s, r$sesonal_sin) |> formatC(format = "e", digits = 1)
data$sin_err[2] <- mse(f_c, r$sesonal_cos) |> formatC(format = "e", digits = 1)
data$ec_err[2] <- mse(f_C+f_e, r$trend) |> formatC(format = "e", digits = 1)


# png("C:/Users/nik1m/Desktop/уник/6 сем/курсач/Текст работы/img/trend inseparability/CiSSA.png")  # сохранение в формате PNG

plot(1:n, f_n, type = "l", lwd=3, ylim= c(-2, 10), col="red",
     xlab = "Время", ylab = "Значения ряда", main = "CiSSA разложение временного ряда")
lines(1:n, r$trend, col = "blue")
lines(1:n, r$sesonal_sin, col = "blue")
lines(1:n, r$sesonal_cos, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)


# dev.off()  # завершение сохранения










s <- ssa(f_n, L)
e <- eossa(s, 1:10, k = 7)

g_sesonal <- grouping.auto(e, base = "eigen",
                   freq.bins = list(trend = c(0.001),
                                    sesonal2 = c(1/25, 1/23),
                                    sesonal1 = c(1/13, 1/11)
                                    ),
                   threshold = 0.1)


r <- Rssa::reconstruct(e, groups=c(list(exp = 1,
                                C = 2
                                ),
                             g_sesonal)
                 )

plot(wcor(e, groups = 1:24), scales = list(at = c(10, 20, 30)))
Предупреждение в wcor.ossa(e, groups = 1:24) :
  Component matrices are not F-orthogonal (max F-cor is 0.93). W-cor matrix can be irrelevant

data$c_err[1] <- mse(f_C, r$C) |> formatC(format = "e", digits = 1)
data$e_err[1] <- mse(f_e, r$exp) |> formatC(format = "e", digits = 1)
data$cos_err[1] <- mse(f_c, r$sesonal1) |> formatC(format = "e", digits = 1)
data$sin_err[1] <- mse(f_s, r$sesonal2) |> formatC(format = "e", digits = 1)
data$ec_err[1] <- mse(f_C+f_e, r$C+r$exp) |> formatC(format = "e", digits = 1)


# png("C:/Users/nik1m/Desktop/уник/6 сем/курсач/Текст работы/img/trend inseparability/SSA.png")  # сохранение в формате PNG

plot(1:n, f_n, type = "l", lwd=3, ylim= c(-2, 10), col="red",
     xlab = "Время", ylab = "Значения ряда", main = "SSA разложение временного ряда")

lines(1:n, r$trend, type = "l", col="green")
lines(1:n, r$exp, type = "l", ylim= c(-2, 10), col="blue")
lines(1:n, r$C, col = "blue")
lines(1:n, r$sesonal1, col = "blue")
lines(1:n, r$sesonal2, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)








# Шаг 3: Преобразование данных в формат LaTeX
table_latex <- xtable(data, caption = "Example Table")

# Шаг 4: Вывод таблицы в LaTeX файл
print(table_latex, include.rownames = FALSE)
% latex table generated in R 4.2.2 by xtable 1.8-4 package
% Mon Nov  4 13:25:09 2024
\begin{table}[ht]
\centering
\begin{tabular}{llllll}
  \hline
Метод & e\_err & c\_err & ec\_err & sin\_err & cos\_err \\ 
  \hline
SSA & 2.2e-25 & 2.2e-25 & 4.2e-28 & 3.8e-29 & 1.6e-29 \\ 
  CiSSA & 20 & 35 & 3.5e-02 & 1.4e-04 & 1.9e-03 \\ 
   \hline
\end{tabular}
\caption{Example Table} 
\end{table}

Пример cos*exp

n <- 96*2-1
L <- 96
eps <- 1/(L+1)

C <- 1
omega_cs <- 1/12
omega_sn <- 1/24
a <- 1/100
omega_exp <- 1/48
f_sum <- function(x){
    f_cos(x, omega = omega_cs) +
    f_exp_mod_harm_series(x, a = a, omega = omega_exp) +
    f_sin(x, omega = omega_sn)
}


f_c <- f_cos |> generate_ts(n, omega = omega_cs)
f_s <- f_sin |> generate_ts(n, omega = omega_sn)
f_e <- f_exp_mod_harm_series |> generate_ts(n, a = a, omega = omega_exp)

f_n <- f_sum(1:n)

library(xtable)

# Шаг 2: Создание примера данных
data <- data.frame(
  Метод = c("SSA", "CiSSA"),
  exp_err = c(20, 20),
  sin_err = c (20, 20),
  cos_err = c(1, 1)
)


# Отрисовка ряда f_n
plot(f_n, type = "l", lwd = 3, col = 'red', ylim = c(-10, 10),
     xlab = "Время", ylab = "Значения ряда", main = "Разложение временного ряда")

# Добавление отдельных компонентов (f_C, f_c, f_e)
lines(f_c, col = "blue")  # Компонент f_c
lines(f_e, col = "blue")  # Компонент f_e
lines(f_s, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)









c <- circulant_SSA(f_n, L = L, extend_flag = TRUE)
# r <- c$t_series
r <- grouping_cissa(c,
                    groups = list(
                      trend = c(0, 1/26-eps),
                      sesonal_cos = c(1/14, 1/10),
                      sesonal_sin = c(1/26, 1/23)
                    ))

data$cos_err[2] <- mse(f_s, r$sesonal_sin) |> formatC(format = "e", digits = 1)
data$sin_err[2] <- mse(f_c, r$sesonal_cos) |> formatC(format = "e", digits = 1)
data$exp_err[2] <- mse(f_e, r$trend) |> formatC(format = "e", digits = 1)


# png("C:/Users/nik1m/Desktop/уник/6 сем/курсач/Текст работы/img/trend inseparability/CiSSA.png")  # сохранение в формате PNG

plot(1:n, f_n, type = "l", lwd=3, ylim= c(-10, 10), col="red",
     xlab = "Время", ylab = "Значения ряда", main = "CiSSA разложение временного ряда")
lines(1:n, r$trend, col = "blue")
lines(1:n, r$sesonal_sin, col = "blue")
lines(1:n, r$sesonal_cos, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)


# dev.off()  # завершение сохранения










s <- ssa(f_n, L)
e <- eossa_new(s, nested.groups = list(1:30), clust_type = "distance")

g_sesonal <- grouping.auto(e, base = "eigen",
                   freq.bins = list(trend = c(1/25-eps),
                                    sesonal2 = c(1/25, 1/23),
                                    sesonal1 = c(1/13, 1/11)
                                    ),
                   threshold = 0.1)


r <- reconstruct(e, groups= g_sesonal)

plot(wcor(e, groups = 1:24), scales = list(at = c(10, 20, 30)))
Предупреждение в wcor.ossa(e, groups = 1:24) :
  Component matrices are not F-orthogonal (max F-cor is -0.529). W-cor matrix can be irrelevant

data$exp_err[1] <- mse(f_e, r$trend)  |> formatC(format = "e", digits = 1)
data$cos_err[1] <- mse(f_c, r$sesonal1) |> formatC(format = "e", digits = 1)
data$sin_err[1] <- mse(f_s, r$sesonal2) |> formatC(format = "e", digits = 1)


# png("C:/Users/nik1m/Desktop/уник/6 сем/курсач/Текст работы/img/trend inseparability/SSA.png")  # сохранение в формате PNG

plot(1:n, f_n, type = "l", lwd=3, ylim= c(-10, 10), col="red",
     xlab = "Время", ylab = "Значения ряда", main = "SSA разложение временного ряда")

lines(1:n, r$trend, type = "l", col="blue")
lines(1:n, r$sesonal1, col = "blue")
lines(1:n, r$sesonal2, col = "blue")

# Легенда
legend("topleft", legend = c("Весь ряд", "Компоненты"), 
       col = c("red", "blue"), lty = 1, lwd = 3)








# Шаг 3: Преобразование данных в формат LaTeX
table_latex <- xtable(data, caption = "Example Table")

# Шаг 4: Вывод таблицы в LaTeX файл
print(table_latex, include.rownames = FALSE)
% latex table generated in R 4.2.2 by xtable 1.8-4 package
% Mon Nov  4 13:25:10 2024
\begin{table}[ht]
\centering
\begin{tabular}{llll}
  \hline
Метод & exp\_err & sin\_err & cos\_err \\ 
  \hline
SSA & 4.7e-29 & 1.1e-29 & 8.4e-30 \\ 
  CiSSA & 3.2e-02 & 2.6e-04 & 5.8e-03 \\ 
   \hline
\end{tabular}
\caption{Example Table} 
\end{table}

Данные IP

library(readxl)
Предупреждение: пакет ‘readxl’ был собран под R версии 4.2.3
data <- read_excel("Data/International_Financial_Statistics_.xlsx")
New names:
• `` -> `...2`
• `` -> `...3`
• `` -> `...4`
• `` -> `...5`
• `` -> `...6`
• `` -> `...7`
• `` -> `...8`
• `` -> `...9`
• `` -> `...10`
• `` -> `...11`
• `` -> `...12`
• `` -> `...13`
• `` -> `...14`
• `` -> `...15`
• `` -> `...16`
• `` -> `...17`
• `` -> `...18`
• `` -> `...19`
• `` -> `...20`
• `` -> `...21`
• `` -> `...22`
• `` -> `...23`
• `` -> `...24`
• `` -> `...25`
• `` -> `...26`
• `` -> `...27`
• `` -> `...28`
• `` -> `...29`
• `` -> `...30`
• `` -> `...31`
• `` -> `...32`
• `` -> `...33`
• `` -> `...34`
• `` -> `...35`
• `` -> `...36`
• `` -> `...37`
• `` -> `...38`
• `` -> `...39`
• `` -> `...40`
• `` -> `...41`
• `` -> `...42`
• `` -> `...43`
• `` -> `...44`
• `` -> `...45`
• `` -> `...46`
• `` -> `...47`
• `` -> `...48`
• `` -> `...49`
• `` -> `...50`
• `` -> `...51`
• `` -> `...52`
• `` -> `...53`
• `` -> `...54`
• `` -> `...55`
• `` -> `...56`
• `` -> `...57`
• `` -> `...58`
• `` -> `...59`
• `` -> `...60`
• `` -> `...61`
• `` -> `...62`
• `` -> `...63`
• `` -> `...64`
• `` -> `...65`
• `` -> `...66`
• `` -> `...67`
• `` -> `...68`
• `` -> `...69`
• `` -> `...70`
• `` -> `...71`
• `` -> `...72`
• `` -> `...73`
• `` -> `...74`
• `` -> `...75`
• `` -> `...76`
• `` -> `...77`
• `` -> `...78`
• `` -> `...79`
• `` -> `...80`
• `` -> `...81`
• `` -> `...82`
• `` -> `...83`
• `` -> `...84`
• `` -> `...85`
• `` -> `...86`
• `` -> `...87`
• `` -> `...88`
• `` -> `...89`
• `` -> `...90`
• `` -> `...91`
• `` -> `...92`
• `` -> `...93`
• `` -> `...94`
• `` -> `...95`
• `` -> `...96`
• `` -> `...97`
• `` -> `...98`
• `` -> `...99`
• `` -> `...100`
• `` -> `...101`
• `` -> `...102`
• `` -> `...103`
• `` -> `...104`
• `` -> `...105`
• `` -> `...106`
• `` -> `...107`
• `` -> `...108`
• `` -> `...109`
• `` -> `...110`
• `` -> `...111`
• `` -> `...112`
• `` -> `...113`
• `` -> `...114`
• `` -> `...115`
• `` -> `...116`
• `` -> `...117`
• `` -> `...118`
• `` -> `...119`
• `` -> `...120`
• `` -> `...121`
• `` -> `...122`
• `` -> `...123`
• `` -> `...124`
• `` -> `...125`
• `` -> `...126`
• `` -> `...127`
• `` -> `...128`
• `` -> `...129`
• `` -> `...130`
• `` -> `...131`
• `` -> `...132`
• `` -> `...133`
• `` -> `...134`
• `` -> `...135`
• `` -> `...136`
• `` -> `...137`
• `` -> `...138`
• `` -> `...139`
• `` -> `...140`
• `` -> `...141`
• `` -> `...142`
• `` -> `...143`
• `` -> `...144`
• `` -> `...145`
• `` -> `...146`
• `` -> `...147`
• `` -> `...148`
• `` -> `...149`
• `` -> `...150`
• `` -> `...151`
• `` -> `...152`
• `` -> `...153`
• `` -> `...154`
• `` -> `...155`
• `` -> `...156`
• `` -> `...157`
• `` -> `...158`
• `` -> `...159`
• `` -> `...160`
• `` -> `...161`
• `` -> `...162`
• `` -> `...163`
• `` -> `...164`
• `` -> `...165`
• `` -> `...166`
• `` -> `...167`
• `` -> `...168`
• `` -> `...169`
• `` -> `...170`
• `` -> `...171`
• `` -> `...172`
• `` -> `...173`
• `` -> `...174`
• `` -> `...175`
• `` -> `...176`
• `` -> `...177`
• `` -> `...178`
• `` -> `...179`
• `` -> `...180`
• `` -> `...181`
• `` -> `...182`
• `` -> `...183`
• `` -> `...184`
• `` -> `...185`
• `` -> `...186`
• `` -> `...187`
• `` -> `...188`
• `` -> `...189`
• `` -> `...190`
• `` -> `...191`
• `` -> `...192`
• `` -> `...193`
• `` -> `...194`
• `` -> `...195`
• `` -> `...196`
• `` -> `...197`
• `` -> `...198`
• `` -> `...199`
• `` -> `...200`
• `` -> `...201`
• `` -> `...202`
• `` -> `...203`
• `` -> `...204`
• `` -> `...205`
• `` -> `...206`
• `` -> `...207`
• `` -> `...208`
• `` -> `...209`
• `` -> `...210`
• `` -> `...211`
• `` -> `...212`
• `` -> `...213`
• `` -> `...214`
• `` -> `...215`
• `` -> `...216`
• `` -> `...217`
• `` -> `...218`
• `` -> `...219`
• `` -> `...220`
• `` -> `...221`
• `` -> `...222`
• `` -> `...223`
• `` -> `...224`
• `` -> `...225`
• `` -> `...226`
• `` -> `...227`
• `` -> `...228`
• `` -> `...229`
• `` -> `...230`
• `` -> `...231`
• `` -> `...232`
• `` -> `...233`
• `` -> `...234`
• `` -> `...235`
• `` -> `...236`
• `` -> `...237`
• `` -> `...238`
• `` -> `...239`
• `` -> `...240`
• `` -> `...241`
• `` -> `...242`
• `` -> `...243`
• `` -> `...244`
• `` -> `...245`
• `` -> `...246`
• `` -> `...247`
• `` -> `...248`
• `` -> `...249`
• `` -> `...250`
• `` -> `...251`
• `` -> `...252`
• `` -> `...253`
• `` -> `...254`
• `` -> `...255`
• `` -> `...256`
• `` -> `...257`
• `` -> `...258`
• `` -> `...259`
• `` -> `...260`
• `` -> `...261`
• `` -> `...262`
• `` -> `...263`
• `` -> `...264`
• `` -> `...265`
• `` -> `...266`
• `` -> `...267`
• `` -> `...268`
• `` -> `...269`
• `` -> `...270`
• `` -> `...271`
• `` -> `...272`
• `` -> `...273`
• `` -> `...274`
• `` -> `...275`
• `` -> `...276`
• `` -> `...277`
• `` -> `...278`
• `` -> `...279`
• `` -> `...280`
• `` -> `...281`
• `` -> `...282`
• `` -> `...283`
• `` -> `...284`
• `` -> `...285`
• `` -> `...286`
• `` -> `...287`
• `` -> `...288`
• `` -> `...289`
• `` -> `...290`
• `` -> `...291`
• `` -> `...292`
• `` -> `...293`
• `` -> `...294`
• `` -> `...295`
• `` -> `...296`
• `` -> `...297`
• `` -> `...298`
• `` -> `...299`
• `` -> `...300`
• `` -> `...301`
• `` -> `...302`
• `` -> `...303`
• `` -> `...304`
• `` -> `...305`
• `` -> `...306`
• `` -> `...307`
• `` -> `...308`
• `` -> `...309`
• `` -> `...310`
• `` -> `...311`
• `` -> `...312`
• `` -> `...313`
• `` -> `...314`
• `` -> `...315`
• `` -> `...316`
• `` -> `...317`
• `` -> `...318`
• `` -> `...319`
• `` -> `...320`
• `` -> `...321`
• `` -> `...322`
• `` -> `...323`
• `` -> `...324`
• `` -> `...325`
• `` -> `...326`
• `` -> `...327`
• `` -> `...328`
• `` -> `...329`
• `` -> `...330`
• `` -> `...331`
• `` -> `...332`
• `` -> `...333`
• `` -> `...334`
• `` -> `...335`
• `` -> `...336`
• `` -> `...337`
• `` -> `...338`
• `` -> `...339`
• `` -> `...340`
• `` -> `...341`
• `` -> `...342`
• `` -> `...343`
• `` -> `...344`
• `` -> `...345`
• `` -> `...346`
• `` -> `...347`
• `` -> `...348`
• `` -> `...349`
• `` -> `...350`
• `` -> `...351`
• `` -> `...352`
• `` -> `...353`
• `` -> `...354`
• `` -> `...355`
• `` -> `...356`
• `` -> `...357`
• `` -> `...358`
• `` -> `...359`
• `` -> `...360`
• `` -> `...361`
• `` -> `...362`
• `` -> `...363`
• `` -> `...364`
• `` -> `...365`
• `` -> `...366`
• `` -> `...367`
• `` -> `...368`
• `` -> `...369`
• `` -> `...370`
• `` -> `...371`
• `` -> `...372`
• `` -> `...373`
• `` -> `...374`
• `` -> `...375`
• `` -> `...376`
• `` -> `...377`
• `` -> `...378`
• `` -> `...379`
• `` -> `...380`
• `` -> `...381`
• `` -> `...382`
• `` -> `...383`
• `` -> `...384`
• `` -> `...385`
• `` -> `...386`
• `` -> `...387`
• `` -> `...388`
• `` -> `...389`
• `` -> `...390`
• `` -> `...391`
• `` -> `...392`
• `` -> `...393`
• `` -> `...394`
• `` -> `...395`
• `` -> `...396`
• `` -> `...397`
• `` -> `...398`
• `` -> `...399`
• `` -> `...400`
• `` -> `...401`
• `` -> `...402`
• `` -> `...403`
• `` -> `...404`
• `` -> `...405`
• `` -> `...406`
• `` -> `...407`
• `` -> `...408`
• `` -> `...409`
• `` -> `...410`
• `` -> `...411`
• `` -> `...412`
• `` -> `...413`
• `` -> `...414`
• `` -> `...415`
• `` -> `...416`
• `` -> `...417`
• `` -> `...418`
• `` -> `...419`
• `` -> `...420`
• `` -> `...421`
• `` -> `...422`
• `` -> `...423`
• `` -> `...424`
• `` -> `...425`
• `` -> `...426`
• `` -> `...427`
• `` -> `...428`
• `` -> `...429`
• `` -> `...430`
• `` -> `...431`
• `` -> `...432`
• `` -> `...433`
• `` -> `...434`
• `` -> `...435`
• `` -> `...436`
• `` -> `...437`
• `` -> `...438`
• `` -> `...439`
• `` -> `...440`
• `` -> `...441`
• `` -> `...442`
• `` -> `...443`
• `` -> `...444`
• `` -> `...445`
• `` -> `...446`
• `` -> `...447`
• `` -> `...448`
• `` -> `...449`
• `` -> `...450`
• `` -> `...451`
• `` -> `...452`
• `` -> `...453`
• `` -> `...454`
• `` -> `...455`
• `` -> `...456`
• `` -> `...457`
• `` -> `...458`
• `` -> `...459`
• `` -> `...460`
• `` -> `...461`
• `` -> `...462`
• `` -> `...463`
• `` -> `...464`
• `` -> `...465`
• `` -> `...466`
• `` -> `...467`
• `` -> `...468`
• `` -> `...469`
• `` -> `...470`
• `` -> `...471`
• `` -> `...472`
• `` -> `...473`
• `` -> `...474`
• `` -> `...475`
• `` -> `...476`
• `` -> `...477`
• `` -> `...478`
• `` -> `...479`
• `` -> `...480`
• `` -> `...481`
• `` -> `...482`
• `` -> `...483`
• `` -> `...484`
• `` -> `...485`
• `` -> `...486`
• `` -> `...487`
• `` -> `...488`
• `` -> `...489`
• `` -> `...490`
• `` -> `...491`
• `` -> `...492`
• `` -> `...493`
• `` -> `...494`
• `` -> `...495`
• `` -> `...496`
• `` -> `...497`
• `` -> `...498`
• `` -> `...499`
• `` -> `...500`
• `` -> `...501`
• `` -> `...502`
• `` -> `...503`
• `` -> `...504`
• `` -> `...505`
• `` -> `...506`
• `` -> `...507`
• `` -> `...508`
• `` -> `...509`
• `` -> `...510`
• `` -> `...511`
• `` -> `...512`
• `` -> `...513`
• `` -> `...514`
• `` -> `...515`
• `` -> `...516`
• `` -> `...517`
• `` -> `...518`
• `` -> `...519`
• `` -> `...520`
• `` -> `...521`
• `` -> `...522`
• `` -> `...523`
• `` -> `...524`
• `` -> `...525`
• `` -> `...526`
• `` -> `...527`
• `` -> `...528`
• `` -> `...529`
• `` -> `...530`
• `` -> `...531`
• `` -> `...532`
• `` -> `...533`
• `` -> `...534`
• `` -> `...535`
• `` -> `...536`
• `` -> `...537`
• `` -> `...538`
• `` -> `...539`
• `` -> `...540`
• `` -> `...541`
• `` -> `...542`
• `` -> `...543`
• `` -> `...544`
• `` -> `...545`
• `` -> `...546`
• `` -> `...547`
• `` -> `...548`
• `` -> `...549`
• `` -> `...550`
• `` -> `...551`
• `` -> `...552`
• `` -> `...553`
• `` -> `...554`
• `` -> `...555`
• `` -> `...556`
• `` -> `...557`
• `` -> `...558`
• `` -> `...559`
• `` -> `...560`
• `` -> `...561`
• `` -> `...562`
• `` -> `...563`
• `` -> `...564`
• `` -> `...565`
• `` -> `...566`
• `` -> `...567`
• `` -> `...568`
• `` -> `...569`
• `` -> `...570`
• `` -> `...571`
• `` -> `...572`
• `` -> `...573`
• `` -> `...574`
• `` -> `...575`
• `` -> `...576`
• `` -> `...577`
• `` -> `...578`
• `` -> `...579`
data |> head()

Отрисовка данных IP

dates <- seq(as.Date("1970-01-01"), as.Date("2018-1-30"), by = "month")
IP_values <- data[2, -c(1, 2)] |> as.double() 
plot(dates, IP_values, type="l")

Cissa

Отрисовка трендовой составляющей чёрным цветом, основной временной ряд — красным

data_slice <- 1:537
dates_slice <- dates[data_slice]
IP_values_slice <- IP_values[data_slice]
eps <- 1/193

c <- circulant_SSA(IP_values_slice, L = 192, extend_flag = TRUE)
r <- c$t_series
r <- grouping_cissa(c,
                    groups = list(
                      trend = c(0, 1/192),
                      cycle = c(1/97, 5/95),
                      sesonal = c(1/13, 1/2+0.0001)
                    )
                    )
r_sesonal <-  grouping_cissa(c,
                             groups = list(
                              s1 = c(16/192 - eps, 16/192 + eps),
                              s2 = c(32/192 - eps, 32/192 + eps),
                              s3 = c(48/192 - eps, 48/192 + eps),
                              s4 = c(64/192 - eps, 64/192 + eps),
                              s5 = c(80/192 - eps, 80/192 + eps),
                              s6 = c(96/192 - eps, 96/192 + eps)
                             )
                             )
# cissa_trend <- r[,1] + r[,2]
# cissa_cycle <- r[, 3:11] |> rowSums()
# cissa_sesonal <- r[, c(17, 33, 49, 65, 81, 97)] |> rowSums()
# cissa_residuals <- IP_values_slice - (cissa_trend + cissa_cycle + cissa_sesonal)

cissa_trend <- r$trend
cissa_cycle <- r$cycle
cissa_sesonal <- Reduce("+", r_sesonal |> within(rm(residuals)))
cissa_residuals <- IP_values_slice - (cissa_trend + cissa_cycle + cissa_sesonal)


plot(dates_slice, IP_values_slice,
     type="l", col = "black")
lines(dates_slice, cissa_trend,
      type="l", col = "red")


plot(dates_slice, cissa_cycle,
     type="l", col = "red")


plot(dates_slice, cissa_sesonal,
     type="l", col = "red")


plot(dates_slice, cissa_residuals,
     type="l", col = "red")


plot(dates_slice, IP_values_slice,
     type="l", col = "black")
lines(dates_slice, cissa_trend+cissa_cycle+cissa_sesonal,
      type="l", col = "red")

SSA fossa

s <- ssa(IP_values_slice, L = 192)
e <- fossa(s)
# e <- eossa_new(s, nested.groups = list(1:30), clust_type = "distance")
eps <- 1/193

groups <- grouping.auto(e,
                   freq.bins = list(trend = c(1/192),
                                    cycle = c(1/97, 5/95),
                                    s1 = c(16/192 - eps, 16/192 + eps),
                                    s2 = c(32/192 - eps, 32/192 + eps),
                                    s3 = c(48/192 - eps, 48/192 + eps),
                                    s4 = c(64/192 - eps, 64/192 + eps),
                                    s5 = c(80/192 - eps, 80/192 + eps),
                                    s6 = c(96/192 - eps, 96/192 + eps)
                                    ),
                   threshold = 0)


plot(wcor(e, groups = 1:30), scales = list(at = c(10, 20, 30)),
     main = "W-correlation matrix SSA (fossa)")


r <- reconstruct(e, groups=groups)

ssa_trend_f <- r$trend
ssa_cycle_f <- r$cycle
ssa_sesonal_f <- r$s1 + r$s2 + r$s3 + r$s4 + r$s5 + r$s6
ssa_residuals_f <- IP_values_slice - (ssa_trend_f + ssa_cycle_f + ssa_sesonal_f)

plot(dates_slice, IP_values_slice,
     type="l", col = "black")
lines(dates_slice, ssa_trend_f,
      type="l", col = "magenta")


plot(dates_slice, ssa_cycle_f, 
     type="l", col = "magenta")


plot(dates_slice, ssa_sesonal_f, 
     type="l", col = "magenta")


plot(dates_slice, ssa_residuals_f,
     type="l", col = "magenta")

SSA eossa

library(Rssa)
source("eossa_new.r")
s <- ssa(IP_values_slice, L = 192)
e <- eossa_new(s, nested.groups = list(1:30), clust_type = "distance")




groups <- grouping.auto(e,
                   freq.bins = list(trend = c(1/192),
                                    cycle = c(1/97, 5/95),
                                    s1 = c(16/192 - eps, 16/192 + eps),
                                    s2 = c(32/192 - eps, 32/192 + eps),
                                    s3 = c(48/192 - eps, 48/192 + eps),
                                    s4 = c(64/192 - eps, 64/192 + eps),
                                    s5 = c(80/192 - eps, 80/192 + eps),
                                    s6 = c(96/192 - eps, 96/192 + eps)
                                    ),
                   threshold = 0)
plot(wcor(e, groups = 1:30), scales = list(at = c(10, 20, 30)),
     main = "W-correlation matrix SSA (eossa)")
Предупреждение в wcor.ossa(e, groups = 1:30) :
  Component matrices are not F-orthogonal (max F-cor is -0.0621). W-cor matrix can be irrelevant

r <- reconstruct(e, groups=groups)

ssa_trend <- r$trend
ssa_cycle <- r$cycle
ssa_sesonal <- r$s1 + r$s2 + r$s3 + r$s4 + r$s5 + r$s6
ssa_residuals <- IP_values_slice - (ssa_trend + ssa_cycle + ssa_sesonal)

plot(dates_slice, IP_values_slice,
     type="l", col = "black")
lines(dates_slice, ssa_trend,
      type="l", col = "blue")


plot(dates_slice, ssa_cycle, 
     type="l", col = "blue")


plot(dates_slice, ssa_sesonal, 
     type="l", col = "blue")


plot(dates_slice, ssa_residuals,
     type="l", col = "blue")

plot(dates_slice, IP_values_slice,
     main = "IP USA тренд",xlab = "Время", ylab = "Значение",
     type="l", col = "black")
lines(dates_slice, ssa_trend,
      type="l", col = "blue", lwd=2)
lines(dates_slice, ssa_trend_f,
      type="l", col = "magenta", lwd=2)
lines(dates_slice, cissa_trend,
      type="l", col = "red", lwd=2)
# Легенда
legend("topleft", legend = c("Весь ряд", "CiSSA тренд", "SSA тренд (eossa)", "SSA тренд (fossa)"), 
       col = c("black", "red", "blue", "magenta"), lty = 1, lwd = 3)



plot(dates_slice, ssa_cycle,
     main = "IP USA цикличность", xlab = "Время", ylab = "Значение",
     type="l", col = "blue", ylim=c(-10, 10), lwd=2)
lines(dates_slice, cissa_cycle,
      type="l", col = "red", lwd=2)
lines(dates_slice, ssa_cycle_f,
      type="l", col = "magenta", lwd=2)
# Легенда
legend("topleft", legend = c("CiSSA", "SSA (eossa)", "SSA (fossa)"), 
       col = c("red", "blue", "magenta"), lty = 1, lwd = 3)

# Настройка графиков для отображения двух графиков один под другим с общей осью X
layout(matrix(c(1, 2), nrow = 2, byrow = TRUE), heights = c(1, 1.2))

# Построение первого графика
par(mar = c(2, 4, 2, 2)) # Уменьшение нижнего отступа
plot(dates_slice, ssa_sesonal, type = "l", col = "blue", lwd = 1,
     main = "SSA (eossa) сезонность", xlab = "", ylab = "Значение")
# Добавление оси X внизу первого графика, но с пустыми метками
axis(1, labels = FALSE)

# Построение второго графика
par(mar = c(5, 4, 2, 2)) # Увеличение нижнего отступа
plot(dates_slice, ssa_sesonal_f, type = "l", col = "magenta", lwd = 1,
     main = "SSA (fossa) сезонность", xlab = "Время", ylab = "Значение")

par(mar = c(3, 4, 2, 2)) # Увеличение нижнего отступа

plot(dates_slice, cissa_sesonal, type = "l", col = "red", lwd = 1,
     main = "CiSSA сезонность", xlab = "Время", ylab = "Значение")

# Восстановление макета по умолчанию
layout(1)

NA
NA
plot(dates_slice, ssa_residuals, 
     main = "IP USA остаток", xlab = "Время", ylab = "Значение",
     type="l", col = "blue", ylim=c(-2, 2))
lines(dates_slice, cissa_residuals,
      type="l", col = "red")
lines(dates_slice, ssa_residuals_f,
      type="l", col = "magenta")
legend("topleft", legend = c("CiSSA", "SSA (eossa)", "SSA (fossa)"), 
       col = c("red", "blue", "magenta"), lty = 1, lwd = 3)

ssa_residuals |> density() |> plot()

cissa_residuals |> density() |> plot()

Отделение сигнала от шума

set.seed(100)

n_mse_tests <- function(n){
  n <- 96*2-1
  L <- 96
  sigma <- 0.1
  
  
  C <- 1
  omega_cs <- 1/12
  omega_sn <- 1/24
  a <- 1/100
  f_sum <- function(x){
    f_const(x, C = C) +
      f_cos(x, omega = omega_cs) +
      f_exp(x, a = a) +
      f_sin(x, omega = omega_sn)
  }
  
  
  f_C <- f_const |> generate_ts(n, C = C)
  f_c <- f_cos |> generate_ts(n, omega = omega_cs)
  f_s <- f_sin |> generate_ts(n, omega = omega_sn)
  f_e <- f_exp |> generate_ts(n, a = a)
  
  mse_lst <- list()
  for (i in 1:n) {
    f_noise <- rnorm(n, sd = sigma)
    
    f_n <- f_sum(1:n) + f_noise
    
    
    
    c <- circulant_SSA(f_n, L = L, extend_flag = TRUE)
    # r <- c$t_series
    r <- grouping_cissa(c, groups= list(trend = c(0, 1/1000), 
                                        sesonal2 = c(1/25, 1/23),
                                        sesonal1 = c(1/13, 1/10)
                                        ))
    
    # mse_lst$cissa <- c(mse_lst$cissa, mse(f_sum(1:n), r[, 9] + r[, 5] + r[, 1])) 
    mse_lst$cissa <- c(mse_lst$cissa,
                       mse(f_sum(1:n),
                           r$trend + r$sesonal1 + r$sesonal2)) 
    
    
    
    
    s <- ssa(f_n, L)
    # e <- eossa(s, 1:10, k = 6)
    e <- fossa(s)
    
    g_sesonal <- grouping.auto(e, base = "eigen",
                       freq.bins = list(trend = 1/1000, 
                                        sesonal2 = c(1/25, 1/23),
                                        sesonal1 = c(1/13, 1/10)
                                        ),
                       threshold = 0.5)
    
    r <- reconstruct(e, groups=c(list(exp = 1, C = 2), g_sesonal))
    
    mse_lst$ssa <- 
      c(mse_lst$ssa, mse(f_sum(1:n), r$trend + r$sesonal2 + r$sesonal1))
 
  }
  return(mse_lst)
}

res_mse_test <- n_mse_tests(10000)
# Оценка плотности
density_estimate_cissa <- density(res_mse_test$cissa)

# Построение графика плотности
plot(density_estimate_cissa, main = "Оценка плотности", 
     xlab = "Значение", ylab = "Плотность", 
     col = "blue", lwd = 2)


density_estimate_ssa <- density(res_mse_test$ssa)

# Построение графика плотности
plot(density_estimate_ssa, main = "Оценка плотности", 
     xlab = "Значение", ylab = "Плотность", 
     col = "blue", lwd = 2)


res_mse_test$cissa |> summary()
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
0.02299 0.03062 0.03345 0.03378 0.03575 0.04800 
res_mse_test$cissa |> sd()
[1] 0.004333975
res_mse_test$ssa |> summary()
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
0.000576 0.001710 0.002125 0.002228 0.002585 0.006311 
res_mse_test$ssa |> sd()
[1] 0.0008283841

Как выполняется расширение ряда

IP_values_slice |> extend(192) |> plot(type="l", lwd = 3)
c(rep(0, 192),IP_values_slice) |> lines(type="l", col="red")

Фурье преобразование

n <- 96*2
L <- 96

x <- 0:(n-1)
y1 <- cos(2 * pi / 12 * x)  # Первая компонента
y2 <- sin(2 * pi / 48 * x)  # Вторая компонента

# Создаем общий временной ряд
y <- y1 + y2

# Выполняем быстрое преобразование Фурье
fft_y <- fft(y)

# Получаем амплитуды и фазы
amplitudes <- Mod(fft_y)
phases <- Arg(fft_y)

# Индексы для частот
n <- length(y)
frequencies <- (0:(n-1)) / n

# Функция для восстановления компонент
reconstruct_fft <- function(frequencies, amplitudes, phases) {
  reconstructed <- list()
  n <- length(amplitudes)
  for (i in 1:(length(amplitudes))) {
    reconstructed[[i]] <-
      amplitudes[i] * cos(2 * pi * frequencies[i] * x + phases[i]) / n * 2
  }
  return(reconstructed)
}

# y_main <- y
# X <- hankel(y)
# K <- dim(X)[2]
# res <- list()
# for (i in 1:K){
#   y <- X[, i]
#   
#   # Выполняем быстрое преобразование Фурье
#   fft_y <- fft(y)
#   
#   # Получаем амплитуды и фазы
#   amplitudes <- Mod(fft_y)
#   phases <- Arg(fft_y)
#   
#   res[[i]] <- reconstruct_fft(frequencies, amplitudes, phases)
# }
# 
# nft <- res[[1]]
# print(nft |> length())
# res_full <- matrix(0, nrow =  |> length(), )
# 
# for (i in 1:K){
#   res_full <- 
# }

# 
# 
y_reconstructed <- reconstruct_fft(frequencies, amplitudes, phases)

# Строим графики
for (i in 1:(n)){
  plot(x, y_reconstructed[[i]], main = paste(frequencies[i]))

}


plot(x, Reduce("+", y_reconstructed), type = "l")

# lines(x, y, col = "red", type = "l", lty = 2)
x <- 1:100
y <- sin(2*pi*x)
dftmtx(10)[3, 2]
[1] 0.309017-0.9510565i
dftmtx(10)[2, 3]
[1] 0.309017-0.9510565i
(as.matrix(dftmtx(10)[3, ])) %*% t(as.matrix(Conj(dftmtx(10)[, 3])))
                      [,1]                 [,2]                 [,3]                 [,4]                 [,5]
 [1,]  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i
 [2,]  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i
 [3,] -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i
 [4,] -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000-0.0000000i  0.309017+0.9510565i
 [5,]  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i
 [6,]  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i
 [7,]  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i
 [8,] -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i
 [9,] -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000-0.0000000i  0.309017+0.9510565i
[10,]  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i
                      [,6]                 [,7]                 [,8]                 [,9]                [,10]
 [1,]  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i
 [2,]  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i
 [3,] -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i
 [4,] -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i
 [5,]  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i
 [6,]  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i
 [7,]  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i
 [8,] -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i -0.809017+0.5877853i
 [9,] -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i  0.309017+0.9510565i
[10,]  0.309017+0.9510565i -0.809017+0.5877853i -0.809017-0.5877853i  0.309017-0.9510565i  1.000000+0.0000000i
dim( t(as.matrix(Conj(dftmtx(10)[3, ]))))
[1]  1 10
dim(as.matrix(dftmtx(10)[3, ]))
[1] 10  1

X <- matrix(c(32, 21, 23,
           521,631452, 25251,
           1536, 75, 38), nrow= 3)
f_mat <- dftmtx(3) / sqrt(3)
f_mat_inv <- Conj(f_mat)
X
     [,1]   [,2] [,3]
[1,]   32    521 1536
[2,]   21 631452   75
[3,]   23  25251   38
f_mat %*% f_mat_inv %*% X
      [,1]      [,2]    [,3]
[1,] 32+0i    521+0i 1536+0i
[2,] 21+0i 631452+0i   75+0i
[3,] 23+0i  25251+0i   38+0i
data_slice <- 1:538
n <- 96*2
L <- 96

x <- data_slice
y1 <- cos(2 * pi / 12 * x)  # Первая компонента
y2 <- sin(2 * pi / 48 * x)  # Вторая компонента

# Создаем общий временной ряд
y <- IP_values[data_slice]
y_extended <- y |> extend(L)
x <- 1:length(y_extended)
y <- IP_values[data_slice]

# Выполняем быстрое преобразование Фурье
fft_y <- fft(y)

# Получаем амплитуды и фазы
amplitudes <- Mod(fft_y)
phases <- Arg(fft_y)

# Индексы для частот
n <- length(y)
frequencies <- (0:(n-1)) / n

# Функция для восстановления компонент
reconstruct_fft <- function(frequencies, amplitudes, phases) {
  reconstructed <- list()
  n <- length(amplitudes)
  for (i in 1:(length(amplitudes))) {
    reconstructed[[i]] <-
      amplitudes[i] * cos(2 * pi * frequencies[i] * x + phases[i]) / n * 2
  }
  return(reconstructed)
}

y_reconstructed <- reconstruct_fft(frequencies, amplitudes, phases)

# Строим графики
for (i in 1:(n)){
  plot(x, y_reconstructed[[i]], main = paste(frequencies[i]))
  
}

data_slice <- 1:538
n <- 96*2
L <- 96

x <- data_slice
y1 <- cos(2 * pi / 12 * x)  # Первая компонента
y2 <- sin(2 * pi / 48 * x)  # Вторая компонента

# Создаем общий временной ряд
y <- IP_values[data_slice]
y_extended <- y |> extend(L)
x <- 1:length(y_extended)
y <- IP_values[data_slice]

# Выполняем быстрое преобразование Фурье
fft_y <- fft(y)

# Получаем амплитуды и фазы
amplitudes <- Mod(fft_y)
phases <- Arg(fft_y)

# Индексы для частот
n <- length(y)
frequencies <- (0:(n-1)) / n

# Функция для восстановления компонент
reconstruct_fft <- function(frequencies, amplitudes, phases) {
  reconstructed <- list()
  n <- length(amplitudes)
  for (i in 1:(length(amplitudes))) {
    reconstructed[[i]] <-
      amplitudes[i] * cos(2 * pi * frequencies[i] * x + phases[i]) / n * 2
  }
  return(reconstructed)
}

y_reconstructed <- reconstruct_fft(frequencies, amplitudes, phases)

# Строим графики
for (i in 1:(n)){
  plot(x, y_reconstructed[[i]], main = paste(frequencies[i]))
  
}

n <- 96*2-1
x <- 0:(n-1)
L <- 96
y <- sin(2*pi/12 * x)

X <- hankel(y, L)

Ft <- dftmtx(L) / sqrt(L)
Ft_inv <- t(Conj(Ft))

component_wise_mult <- function(index){
  Ft %*% t(sweep(Ft_inv, 1, X[, index], '*'))
}


averaging <- function(res_comp_wise_mult){
  K <- dim(X)[2]
  counters <- rep(0, n)
  res <- matrix(0, nrow = n, ncol = L)
  for (i in 1:K){
    res[i:(i+L-1), ] <- res[i:(i+L-1), ] + res_comp_wise_mult[[i]]
    counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
  }
  for (i in 1:n){
    res[i, ] <- res[i, ] / counters[i]
  }
  res
}


res_comp_wise <- lapply(1:L, component_wise_mult)
print(res_comp_wise[[1]])
      [,1]                        [,2]                        [,3]                        [,4]                        [,5]
 [1,] 0+0i  1.387779e-17-4.374756e-17i  2.255141e-17+1.778092e-17i -1.561251e-17+1.994932e-17i -5.377643e-17-6.505213e-18i
 [2,] 0+0i  5.000000e-01+0.000000e+00i  6.938894e-18-6.776264e-17i  1.561251e-17-6.418477e-17i -6.938894e-18+1.170938e-17i
 [3,] 0+0i  1.040834e-17-2.569559e-17i  8.660254e-01+0.000000e+00i -3.989864e-17-3.165870e-17i -5.898060e-17-3.361027e-17i
 [4,] 0+0i -2.949030e-17+2.634611e-17i  6.938894e-17-2.667137e-17i  1.000000e+00-0.000000e+00i  2.949030e-17-1.994932e-17i
 [5,] 0+0i  5.204170e-18-4.987330e-18i -1.734723e-17-2.602085e-18i  2.949030e-17+0.000000e+00i  8.660254e-01-0.000000e+00i
 [6,] 0+0i  5.204170e-18+6.505213e-18i  0.000000e+00-3.187554e-17i -5.377643e-17-1.431147e-17i -3.469447e-18+1.144917e-16i
 [7,] 0+0i  3.469447e-18-4.770490e-18i -2.775558e-17-4.336809e-19i -3.469447e-18-6.071532e-18i  2.255141e-17-2.168404e-18i
 [8,] 0+0i -1.734723e-18+1.647987e-17i  0.000000e+00-8.673617e-18i -1.144917e-16+1.149254e-16i -6.938894e-18-1.214306e-17i
 [9,] 0+0i  0.000000e+00+6.071532e-18i  1.734723e-18-5.637851e-18i  0.000000e+00+1.734723e-18i  5.204170e-17-1.301043e-17i
[10,] 0+0i -8.673617e-19-4.336809e-19i -5.204170e-18-5.204170e-18i  2.949030e-17+5.204170e-18i  1.040834e-17+3.469447e-18i
                             [,6]                        [,7]                        [,8]                        [,9]
 [1,]  0.000000e+00+4.987330e-18i  5.777790e-34-3.274081e-33i -3.469447e-18+7.806256e-18i -2.602085e-18+0.000000e+00i
 [2,]  2.515349e-17-3.469447e-18i  3.851860e-34+1.637040e-33i  1.734723e-18+6.505213e-18i -1.040834e-17-7.806256e-18i
 [3,] -1.734723e-18+8.673617e-19i  1.213336e-32-9.629650e-35i -2.602085e-18+6.938894e-18i -1.040834e-17-2.645453e-17i
 [4,]  1.387779e-17-6.722053e-18i  0.000000e+00-2.311116e-33i -6.765422e-17+1.734723e-18i  8.673617e-18+1.734723e-18i
 [5,] -8.673617e-19+9.540979e-18i -3.851860e-34-4.188898e-33i  6.938894e-18+5.421011e-18i  0.000000e+00-7.372575e-18i
 [6,]  5.000000e-01-0.000000e+00i -9.629650e-34-2.888895e-33i -8.673617e-19-8.023096e-18i  1.214306e-17-1.691355e-17i
 [7,] -1.040834e-17-6.071532e-18i  1.224606e-16+0.000000e+00i  6.938894e-18+5.421011e-18i -1.040834e-17-8.239937e-18i
 [8,] -8.673617e-19-2.406929e-17i -7.896313e-33+9.629650e-34i -5.000000e-01-0.000000e+00i -1.214306e-17+5.811324e-17i
 [9,] -8.673617e-19+1.387779e-17i  9.629650e-34-5.488900e-33i -8.673617e-19+2.775558e-17i -8.660254e-01-0.000000e+00i
[10,] -8.673617e-19+2.385245e-18i -3.274081e-33-1.829633e-33i -2.255141e-17-4.987330e-18i -3.469447e-18+2.753874e-17i
                            [,10]                       [,11]                       [,12]                       [,13]
 [1,] -8.673617e-18+1.821460e-17i -1.734723e-18-8.673617e-19i -8.673617e-19+1.734723e-18i  0.000000e+00-3.851860e-34i
 [2,]  5.724587e-17+5.204170e-18i  7.806256e-18-1.040834e-17i  0.000000e+00+1.257675e-17i -3.851860e-34+2.311116e-33i
 [3,]  1.734723e-18-6.071532e-18i  5.030698e-17-2.775558e-17i  1.734723e-18+4.336809e-18i -3.466674e-33-3.274081e-33i
 [4,] -3.122502e-17+2.862294e-17i  6.938894e-18-6.071532e-18i  5.551115e-17+3.903128e-18i -7.703720e-34-4.237046e-33i
 [5,] -2.255141e-17+2.255141e-17i  1.387779e-17-2.211772e-17i  8.673617e-19-3.469447e-18i  2.465190e-32+9.629650e-34i
 [6,] -8.673617e-18+1.734723e-17i  2.255141e-17-3.035766e-18i  2.602085e-18+1.474515e-17i -1.540744e-33-1.155558e-33i
 [7,] -6.938894e-18+3.035766e-18i -1.144917e-16+7.372575e-18i -2.602085e-18+2.168404e-18i -5.007418e-33+1.925930e-34i
 [8,] -2.949030e-17-6.808790e-17i -8.673617e-18-2.558717e-17i -4.336809e-17+2.537033e-17i  3.466674e-33+1.540744e-33i
 [9,]  1.734723e-18+7.719519e-17i  3.469447e-18-1.257675e-17i -2.602085e-18-2.081668e-17i  1.540744e-33+2.503709e-33i
[10,] -1.000000e+00-0.000000e+00i  2.081668e-17-9.887924e-17i  1.734723e-17-9.540979e-18i  5.007418e-33+3.851860e-33i
                            [,14]                       [,15]                       [,16]                       [,17]
 [1,]  4.770490e-18-1.734723e-18i  6.938894e-18-1.734723e-18i  1.734723e-18-8.673617e-18i  1.214306e-17+3.469447e-18i
 [2,]  1.647987e-17-1.604619e-17i  2.602085e-18+6.071532e-18i -1.734723e-18+3.469447e-18i  7.806256e-18-6.071532e-18i
 [3,]  5.204170e-18+2.602085e-18i -1.561251e-17+2.428613e-17i  2.602085e-18-6.938894e-18i  0.000000e+00+9.540979e-18i
 [4,]  0.000000e+00-4.770490e-18i -1.734723e-18-1.214306e-17i  8.673617e-19-2.602085e-17i  8.673617e-19+1.734723e-18i
 [5,]  3.469447e-18-9.540979e-18i  1.734723e-18-1.734723e-18i  6.938894e-18+1.214306e-17i -4.423545e-17-3.469447e-18i
 [6,] -8.239937e-17+0.000000e+00i  1.734723e-18-2.602085e-18i -1.734723e-18-2.602085e-18i  2.602085e-18+9.540979e-18i
 [7,] -2.602085e-18-1.387779e-17i -1.422473e-16+9.540979e-18i  0.000000e+00+6.071532e-18i  1.561251e-17-1.040834e-17i
 [8,]  1.734723e-18-1.387779e-17i  6.938894e-18-1.647987e-17i -1.994932e-16+1.734723e-18i  1.734723e-18+1.647987e-17i
 [9,] -5.204170e-18-1.301043e-18i  3.469447e-18+2.732189e-17i -3.469447e-18+1.561251e-17i  5.204170e-17+0.000000e+00i
[10,]  2.688821e-17-2.818926e-18i  0.000000e+00+5.637851e-18i -2.602085e-17-7.979728e-17i  1.734723e-18-2.602085e-17i
                            [,18]                       [,19]                       [,20]                       [,21]
 [1,]  1.301043e-18+3.469447e-18i  2.118523e-33+0.000000e+00i  1.734723e-18+4.336809e-18i  1.734723e-18+1.561251e-17i
 [2,]  8.239937e-18-1.734723e-18i -5.777790e-34-1.925930e-33i  4.336809e-19+8.673617e-19i -4.336809e-18-3.469447e-18i
 [3,]  0.000000e+00-8.673617e-19i  1.117039e-32+7.703720e-34i  2.168404e-18+8.673617e-19i -8.673617e-19+0.000000e+00i
 [4,] -2.168404e-18+8.673617e-19i  1.925930e-33+0.000000e+00i -1.257675e-17-1.734723e-18i  5.204170e-18+1.040834e-17i
 [5,] -1.301043e-18+0.000000e+00i  2.311116e-33+7.703720e-34i  4.336809e-18+1.734723e-18i -1.301043e-17-2.862294e-17i
 [6,] -1.257675e-17-1.647987e-17i -3.851860e-34+4.622232e-33i  4.336809e-19+0.000000e+00i  1.734723e-18-2.602085e-18i
 [7,]  0.000000e+00+1.734723e-18i -2.465190e-32-3.851860e-34i  4.336809e-19-8.673617e-19i  1.734723e-18-2.602085e-18i
 [8,]  6.938894e-18+1.734723e-18i -1.540744e-33+3.851860e-34i -4.293441e-17+5.377643e-17i -8.673617e-19-6.071532e-18i
 [9,] -8.673617e-19+3.469447e-18i  1.540744e-33-3.851860e-34i  2.602085e-18-3.035766e-18i -5.377643e-17+5.204170e-17i
[10,] -1.387779e-17+1.301043e-17i -7.703720e-34-6.933348e-33i  8.673617e-19+1.561251e-17i -2.602085e-18-5.204170e-18i
                            [,22]                       [,23]                       [,24]                       [,25]
 [1,]  4.336809e-19+1.734723e-18i  6.071532e-18-5.204170e-18i -1.355253e-18-8.673617e-19i  0.000000e+00+0.000000e+00i
 [2,]  1.214306e-17+1.387779e-17i -2.602085e-18+0.000000e+00i -2.602085e-18-8.673617e-19i -4.814825e-35+0.000000e+00i
 [3,]  4.336809e-18-1.734723e-18i -4.163336e-17+0.000000e+00i  8.673617e-19-8.673617e-19i -3.274081e-33+0.000000e+00i
 [4,] -1.734723e-18-1.387779e-17i  1.734723e-18-1.734723e-18i -1.994932e-17+0.000000e+00i  1.925930e-34+2.311116e-33i
 [5,]  6.938894e-18+6.938894e-18i -4.336809e-19+6.938894e-18i  2.168404e-18+1.734723e-18i  0.000000e+00-2.311116e-33i
 [6,] -5.464379e-17-5.204170e-17i  0.000000e+00+6.938894e-18i  2.602085e-18-2.602085e-18i -2.503709e-33+0.000000e+00i
 [7,]  3.469447e-18-6.938894e-18i -4.336809e-17-5.724587e-17i  1.734723e-18-8.673617e-19i  3.851860e-34-2.311116e-33i
 [8,] -1.734723e-18+2.255141e-17i -2.602085e-18-1.214306e-17i -4.119968e-17-1.127570e-17i -3.851860e-34-3.081488e-33i
 [9,] -3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i  8.673617e-19-2.602085e-18i  0.000000e+00-7.703720e-34i
[10,] -8.847090e-17+5.464379e-17i -1.734723e-18-1.387779e-17i -4.336809e-19+1.734723e-18i -1.155558e-33+0.000000e+00i
                            [,26]                       [,27]                       [,28]                       [,29]
 [1,] -2.710505e-19+0.000000e+00i  2.385245e-18+5.204170e-18i -1.734723e-18-3.469447e-18i  1.604619e-17+1.387779e-17i
 [2,]  1.382358e-17-1.301043e-17i  6.071532e-18+6.938894e-18i  0.000000e+00-6.938894e-18i -4.336809e-19+1.734723e-18i
 [3,]  5.421011e-20-8.673617e-19i  1.431147e-17+1.734723e-18i -8.673617e-19-3.469447e-18i -6.505213e-19+0.000000e+00i
 [4,]  3.252607e-18-8.673617e-19i -1.517883e-18+0.000000e+00i -8.673617e-19+1.734723e-18i  8.673617e-19-1.734723e-18i
 [5,] -8.673617e-19+2.602085e-18i  1.084202e-18+0.000000e+00i  2.168404e-18-1.734723e-18i -2.775558e-17-2.949030e-17i
 [6,]  6.938894e-18+0.000000e+00i -4.336809e-19+1.734723e-18i -5.637851e-18+0.000000e+00i -1.301043e-18-1.734723e-18i
 [7,]  4.553649e-18+3.469447e-18i  2.862294e-17-3.989864e-17i  2.602085e-18-1.734723e-18i  1.734723e-18+0.000000e+00i
 [8,]  8.673617e-19+0.000000e+00i  2.602085e-18+1.734723e-18i  5.421011e-17+1.387779e-17i  3.469447e-18+3.469447e-18i
 [9,]  4.336809e-19+1.734723e-18i -1.301043e-18+1.734723e-18i -3.469447e-18-1.734723e-18i  4.336809e-19+1.214306e-17i
[10,]  4.336809e-19-2.602085e-18i -1.734723e-18-3.469447e-18i  8.673617e-19+5.204170e-18i  6.505213e-18+5.204170e-18i
                            [,30]                       [,31]                       [,32]                       [,33]
 [1,]  6.505213e-19+8.673617e-19i  0.000000e+00+0.000000e+00i  1.301043e-18-8.673617e-19i -2.688821e-17+0.000000e+00i
 [2,]  7.155734e-18+8.673617e-19i  4.622232e-33-3.081488e-33i -4.336809e-19-8.673617e-19i -3.469447e-18+1.734723e-18i
 [3,]  8.673617e-19+8.673617e-19i -2.619265e-32+0.000000e+00i  1.301043e-18+2.602085e-18i -6.938894e-18-1.734723e-18i
 [4,]  1.084202e-18+0.000000e+00i  4.622232e-33+0.000000e+00i -6.505213e-19+7.806256e-18i  1.301043e-18+3.469447e-18i
 [5,] -1.084202e-18+0.000000e+00i -2.696302e-32-1.540744e-32i  8.673617e-19+3.469447e-18i -1.474515e-17+0.000000e+00i
 [6,] -5.854692e-18-2.168404e-17i -1.540744e-33+6.162976e-33i -2.168404e-19+0.000000e+00i -1.301043e-18+1.734723e-18i
 [7,] -1.517883e-18-1.734723e-18i  2.187856e-31-4.930381e-32i -6.505213e-19-8.673617e-19i  5.637851e-18-1.734723e-18i
 [8,] -3.035766e-18+3.469447e-18i -6.162976e-33+0.000000e+00i -6.505213e-18+2.081668e-17i -3.469447e-18-3.469447e-18i
 [9,]  1.517883e-18+2.602085e-18i -2.465190e-32+3.081488e-33i  0.000000e+00+8.673617e-19i -6.722053e-17-2.775558e-17i
[10,] -6.505213e-19-6.071532e-18i -1.386670e-32-1.848893e-32i  2.168404e-19-3.469447e-18i -1.734723e-18-3.469447e-18i
                            [,34]                       [,35]                       [,36]                       [,37]
 [1,] -1.734723e-18+5.204170e-18i  4.336809e-18+0.000000e+00i  8.673617e-19-8.673617e-19i  2.311116e-33+0.000000e+00i
 [2,]  0.000000e+00+1.561251e-17i -8.673617e-19-8.673617e-19i  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i
 [3,]  6.071532e-18+1.734723e-18i -1.474515e-17-3.989864e-17i -8.673617e-19-8.673617e-19i -7.703720e-34+0.000000e+00i
 [4,]  1.734723e-18+0.000000e+00i  1.734723e-18+0.000000e+00i  1.431147e-17+0.000000e+00i  1.540744e-33+0.000000e+00i
 [5,] -8.673617e-19+3.469447e-18i -1.734723e-18-1.734723e-18i -4.336809e-19-8.673617e-19i -2.465190e-32-1.232595e-32i
 [6,]  2.515349e-17+2.602085e-17i -8.673617e-19+0.000000e+00i -2.602085e-18+0.000000e+00i -1.155558e-33+7.703720e-34i
 [7,]  7.372575e-18+3.469447e-18i -8.673617e-19+1.387779e-17i  2.818926e-18+8.673617e-19i -5.777790e-33+0.000000e+00i
 [8,]  1.301043e-18+6.938894e-18i  3.469447e-18+3.469447e-18i -2.168404e-17+6.938894e-18i -7.703720e-34+0.000000e+00i
 [9,]  8.673617e-19+3.469447e-18i  0.000000e+00-1.734723e-18i -1.734723e-18+8.673617e-19i  3.851860e-34+0.000000e+00i
[10,] -4.336809e-17-4.336809e-17i  5.204170e-18+6.938894e-18i  3.035766e-18+0.000000e+00i -1.155558e-33-3.081488e-33i
                            [,38]                       [,39]                       [,40]                       [,41]
 [1,] -8.673617e-19+0.000000e+00i -6.938894e-18-8.673617e-19i -1.734723e-18+1.734723e-18i  6.938894e-18-6.071532e-18i
 [2,]  1.431147e-17-3.903128e-18i  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i
 [3,]  0.000000e+00+8.673617e-19i -2.688821e-17+0.000000e+00i -1.734723e-18+0.000000e+00i  4.336809e-18+3.469447e-18i
 [4,]  2.602085e-18+0.000000e+00i -4.336809e-18+0.000000e+00i  1.301043e-17-2.428613e-17i -2.602085e-18-2.602085e-18i
 [5,]  8.673617e-19+8.673617e-19i -1.734723e-18+0.000000e+00i  1.734723e-18+1.734723e-18i -2.862294e-17+2.862294e-17i
 [6,]  4.336809e-19+2.688821e-17i -8.673617e-19-1.734723e-18i  2.602085e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.301043e-18-2.602085e-18i  2.688821e-17+2.862294e-17i  2.602085e-18+1.734723e-18i -2.602085e-18+0.000000e+00i
 [8,] -4.770490e-18+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.163336e-17i -1.734723e-18-8.673617e-19i
 [9,] -1.517883e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+2.775558e-17i
[10,]  2.168404e-19-6.938894e-18i  4.336809e-19+1.734723e-18i -6.071532e-18+0.000000e+00i  3.469447e-18+1.734723e-18i
                            [,42]                       [,43]                       [,44]                       [,45]
 [1,]  0.000000e+00+4.336809e-19i  0.000000e+00+3.851860e-34i  8.673617e-19+0.000000e+00i  1.561251e-17+4.336809e-19i
 [2,]  1.387779e-17+1.040834e-17i -1.540744e-33+0.000000e+00i -3.469447e-18+0.000000e+00i  0.000000e+00+1.301043e-18i
 [3,] -8.673617e-19+0.000000e+00i  0.000000e+00+3.081488e-33i  1.734723e-18+0.000000e+00i -1.734723e-18-4.336809e-19i
 [4,]  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i -1.474515e-17-1.040834e-17i -1.734723e-18-8.673617e-19i
 [5,]  0.000000e+00+4.336809e-19i  0.000000e+00+7.703720e-34i  0.000000e+00+0.000000e+00i -1.301043e-17+1.474515e-17i
 [6,] -1.344411e-17+3.903128e-18i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i -1.309632e-32+1.232595e-32i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+0.000000e+00i  0.000000e+00-1.540744e-33i  4.336809e-19+4.163336e-17i -1.734723e-18+8.673617e-19i
 [9,] -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i  1.301043e-18+0.000000e+00i -1.474515e-17+1.387779e-17i
[10,]  2.038300e-17-6.938894e-18i -3.851860e-33-3.081488e-33i -8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i
                            [,46]                       [,47]                       [,48]                       [,49]
 [1,]  1.734723e-18+4.336809e-19i -1.734723e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,] -2.775558e-17+2.081668e-17i  1.734723e-18+1.301043e-18i -8.673617e-19-2.168404e-19i  1.540744e-33-2.888895e-34i
 [3,]  3.469447e-18+0.000000e+00i -1.387779e-17-3.122502e-17i -8.673617e-19+2.168404e-19i -1.540744e-33+3.851860e-34i
 [4,]  1.734723e-18+3.469447e-18i -1.734723e-18+0.000000e+00i -6.938894e-18+4.119968e-18i  0.000000e+00-3.851860e-34i
 [5,] -1.734723e-18+8.673617e-19i -1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i  1.540744e-33+0.000000e+00i
 [6,] -1.387779e-17+4.857226e-17i -5.204170e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  0.000000e+00-3.851860e-34i
 [7,]  1.734723e-18+8.673617e-19i -1.214306e-17+6.938894e-18i -8.673617e-19-4.336809e-19i -1.540744e-33+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -8.673617e-19+3.469447e-18i  0.000000e+00+1.540744e-33i
 [9,]  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.336809e-19i  1.232595e-32+1.309632e-32i
[10,]  1.214306e-17+3.122502e-17i -8.673617e-19-8.673617e-19i  8.673617e-19+0.000000e+00i  4.622232e-33+7.703720e-34i
                            [,50]                       [,51]                       [,52]                       [,53]
 [1,]  0.000000e+00+1.084202e-19i  0.000000e+00+6.505213e-19i  0.000000e+00+8.673617e-19i -1.214306e-17-1.691355e-17i
 [2,]  1.040834e-17-1.517883e-18i -3.469447e-18-1.084202e-18i  1.734723e-18+0.000000e+00i  1.734723e-18+6.505213e-19i
 [3,]  0.000000e+00-3.252607e-19i  6.938894e-18-3.800083e-18i  3.469447e-18+4.336809e-19i -1.734723e-18+0.000000e+00i
 [4,]  0.000000e+00-3.252607e-19i -5.204170e-18+0.000000e+00i  1.387779e-17-6.938894e-18i  0.000000e+00-4.336809e-19i
 [5,] -8.673617e-19-2.168404e-19i  1.734723e-18-2.168404e-19i  3.469447e-18+0.000000e+00i  2.775558e-17+3.642919e-17i
 [6,]  6.938894e-18-6.938894e-18i  0.000000e+00+2.168404e-19i  5.204170e-18-4.336809e-19i  1.734723e-18+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i  1.387779e-17+6.938894e-18i  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  1.734723e-18-1.517883e-17i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00+4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  6.938894e-18+3.035766e-18i
[10,]  6.071532e-18-8.673617e-18i -1.734723e-18-8.673617e-19i -5.204170e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
                            [,54]                       [,55]                       [,56]                       [,57]
 [1,] -8.673617e-19-4.336809e-19i -1.848893e-32-3.081488e-33i  0.000000e+00+4.336809e-19i  0.000000e+00-3.469447e-18i
 [2,] -8.673617e-19+7.372575e-18i  0.000000e+00+0.000000e+00i  3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
 [3,]  8.673617e-19-4.336809e-19i  6.162976e-33-7.395571e-32i  1.734723e-18-4.336809e-19i -1.734723e-18+8.673617e-19i
 [4,]  0.000000e+00+0.000000e+00i -1.232595e-32-4.622232e-33i -1.994932e-17+3.686287e-18i  0.000000e+00+0.000000e+00i
 [5,]  1.734723e-18-4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+2.168404e-19i -1.734723e-18-2.775558e-17i
 [6,] -2.775558e-17-4.553649e-18i -1.232595e-32+0.000000e+00i  0.000000e+00+4.336809e-19i  3.469447e-18+0.000000e+00i
 [7,]  1.734723e-18+2.168404e-19i -1.725633e-31-2.762130e-32i -8.673617e-19-4.336809e-19i -1.734723e-18-4.336809e-19i
 [8,]  2.602085e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+4.119968e-18i  1.734723e-18+4.336809e-19i
 [9,] -8.673617e-19+4.336809e-19i  6.162976e-33+0.000000e+00i  1.734723e-18+0.000000e+00i -6.938894e-17+6.193259e-17i
[10,]  6.938894e-18+7.589415e-18i  0.000000e+00+6.162976e-33i  0.000000e+00+2.168404e-19i  1.734723e-18-4.336809e-19i
                            [,58]                       [,59]                       [,60]                       [,61]
 [1,] -1.734723e-18+8.673617e-19i  1.734723e-18+8.673617e-19i  0.000000e+00-4.336809e-19i  6.162976e-33+0.000000e+00i
 [2,]  1.734723e-18-2.775558e-17i  1.734723e-18-8.673617e-19i  0.000000e+00+4.336809e-19i  2.465190e-32-6.162976e-33i
 [3,]  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i  0.000000e+00-4.336809e-19i  0.000000e+00+1.848893e-32i
 [4,] -6.938894e-18+8.673617e-19i  0.000000e+00-8.673617e-19i -7.806256e-18+3.469447e-18i -1.232595e-32+6.162976e-33i
 [5,] -1.734723e-18-8.673617e-19i -1.734723e-18+0.000000e+00i  0.000000e+00+0.000000e+00i -9.860761e-32+9.860761e-32i
 [6,] -2.775558e-17+1.301043e-17i -1.734723e-18-4.336809e-19i  2.602085e-18+0.000000e+00i  6.162976e-33+0.000000e+00i
 [7,]  1.734723e-18+4.336809e-19i  0.000000e+00-3.035766e-18i  0.000000e+00-2.168404e-19i -6.162976e-33+0.000000e+00i
 [8,]  0.000000e+00-4.336809e-19i -3.469447e-18-4.336809e-19i -1.387779e-17+1.387779e-17i  0.000000e+00-3.081488e-33i
 [9,] -1.734723e-18+4.336809e-19i  1.734723e-18-4.336809e-19i  8.673617e-19-4.336809e-19i  0.000000e+00+3.081488e-33i
[10,] -3.469447e-17+6.707597e-17i -1.734723e-18+2.168404e-19i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
                            [,62]                       [,63]                       [,64]                       [,65]
 [1,]  0.000000e+00-8.673617e-19i  7.806256e-18-8.673617e-19i  1.734723e-18-1.734723e-18i  1.387779e-17-1.387779e-17i
 [2,]  7.806256e-18-3.469447e-18i -1.734723e-18-1.734723e-18i -1.734723e-18+1.734723e-18i  8.673617e-19+0.000000e+00i
 [3,]  1.734723e-18-4.336809e-19i -1.387779e-17-2.775558e-17i -4.336809e-18+1.734723e-18i -7.806256e-18+8.673617e-19i
 [4,]  0.000000e+00+4.336809e-19i -1.734723e-18+0.000000e+00i  2.602085e-18-6.938894e-18i  0.000000e+00+0.000000e+00i
 [5,] -8.673617e-19+0.000000e+00i  8.673617e-19+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+6.938894e-18i
 [6,]  2.081668e-17-1.040834e-17i  0.000000e+00+0.000000e+00i  0.000000e+00+8.673617e-19i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+4.336809e-19i  1.214306e-17-2.081668e-17i  1.734723e-18-8.673617e-19i  7.806256e-18-8.673617e-19i
 [8,]  0.000000e+00+0.000000e+00i -3.469447e-18-8.673617e-19i  1.561251e-17+6.938894e-18i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00-6.505213e-19i  0.000000e+00+4.336809e-19i  1.734723e-18-8.673617e-19i -1.734723e-18+6.071532e-18i
[10,]  6.938894e-18+6.938894e-18i  0.000000e+00-8.673617e-19i  1.734723e-18+0.000000e+00i  3.469447e-18+8.673617e-19i
                            [,66]                       [,67]                       [,68]                       [,69]
 [1,] -4.336809e-19-8.673617e-19i  6.162976e-33+1.848893e-32i  6.505213e-19+0.000000e+00i  4.336809e-19-1.214306e-17i
 [2,]  4.336809e-19-6.071532e-18i -9.244464e-33+1.232595e-32i  4.770490e-18-8.673617e-19i  8.673617e-19+0.000000e+00i
 [3,]  1.301043e-18-1.734723e-18i -9.860761e-32+9.860761e-32i  1.301043e-18+0.000000e+00i -4.336809e-19-1.734723e-18i
 [4,] -3.469447e-18+3.469447e-18i  1.232595e-32-3.081488e-32i -1.951564e-17+6.071532e-18i  3.469447e-18-3.469447e-18i
 [5,] -1.734723e-18+0.000000e+00i  2.465190e-32-6.162976e-33i  3.903128e-18-2.602085e-18i  2.775558e-17-1.387779e-17i
 [6,] -5.637851e-18+6.938894e-18i  6.162976e-33-1.232595e-32i  3.035766e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.734723e-18-4.336809e-19i -4.930381e-32+4.314083e-32i -4.336809e-19-8.673617e-19i  4.336809e-18+0.000000e+00i
 [8,] -8.673617e-19+0.000000e+00i  0.000000e+00-1.232595e-32i  1.301043e-18+6.938894e-18i  0.000000e+00+8.673617e-19i
 [9,]  0.000000e+00+0.000000e+00i  6.162976e-33-6.162976e-33i -8.673617e-19+0.000000e+00i  1.561251e-17+0.000000e+00i
[10,]  7.806256e-18+1.734723e-17i -1.232595e-32+0.000000e+00i  3.469447e-18-4.336809e-19i  1.734723e-18-8.673617e-19i
                            [,70]                       [,71]                       [,72]                       [,73]
 [1,]  2.168404e-18+3.469447e-18i -6.938894e-18+1.734723e-18i  3.252607e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,]  8.673617e-19-2.775558e-17i -1.301043e-18+3.469447e-18i -2.168404e-19+0.000000e+00i -6.740755e-33+3.081488e-33i
 [3,]  2.602085e-18+3.469447e-18i -1.214306e-17-6.938894e-18i -4.336809e-19-8.673617e-19i -3.851860e-34+3.081488e-33i
 [4,]  1.734723e-18-5.204170e-18i -3.903128e-18+0.000000e+00i -5.637851e-18-6.938894e-18i  2.696302e-33+0.000000e+00i
 [5,] -1.734723e-18-1.734723e-18i  6.071532e-18-1.734723e-18i -4.336809e-19+8.673617e-19i -2.157042e-32+0.000000e+00i
 [6,]  1.474515e-17-2.775558e-17i  0.000000e+00+0.000000e+00i  4.336809e-19-8.673617e-19i -6.933348e-33+3.081488e-33i
 [7,]  6.938894e-18-5.204170e-18i -4.163336e-17+1.387779e-17i -4.336809e-19-8.673617e-19i  8.474092e-33+0.000000e+00i
 [8,] -1.734723e-18+0.000000e+00i  0.000000e+00-8.673617e-19i  1.387779e-17-1.301043e-17i  3.081488e-33+0.000000e+00i
 [9,]  3.469447e-18-3.469447e-18i  0.000000e+00+0.000000e+00i -1.734723e-18+8.673617e-19i -2.465190e-32+1.232595e-32i
[10,]  0.000000e+00+1.040834e-17i -1.734723e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  1.540744e-33+0.000000e+00i
                            [,74]                       [,75]                       [,76]                       [,77]
 [1,]  1.084202e-18-8.673617e-19i -4.770490e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -1.344411e-17-2.775558e-17i
 [2,] -6.830474e-18+0.000000e+00i -1.192622e-18+1.734723e-18i -1.734723e-18-6.938894e-18i -3.035766e-18+1.734723e-18i
 [3,] -7.589415e-19-8.673617e-19i  4.141652e-17+1.387779e-17i  8.673617e-19-3.469447e-18i  7.372575e-18-1.734723e-18i
 [4,]  2.168404e-19+3.469447e-18i  2.168404e-18-1.734723e-18i  2.862294e-17+1.734723e-18i -2.168404e-19+0.000000e+00i
 [5,]  8.673617e-19-8.673617e-19i  4.770490e-18-1.734723e-18i -5.637851e-18+1.734723e-18i  4.293441e-17+1.734723e-18i
 [6,]  1.973248e-17+6.071532e-18i  6.505213e-19+0.000000e+00i -6.505213e-18-1.734723e-18i -1.734723e-18+0.000000e+00i
 [7,]  2.602085e-18-2.602085e-18i  1.301043e-18-1.734723e-18i -2.602085e-18+0.000000e+00i -2.168404e-18-6.938894e-18i
 [8,] -8.673617e-19+0.000000e+00i  4.770490e-18-3.469447e-18i -1.431147e-17-1.734723e-18i -1.301043e-18+1.734723e-18i
 [9,] -1.734723e-18+1.734723e-18i  4.336809e-18+0.000000e+00i  0.000000e+00+3.469447e-18i  1.387779e-17-1.387779e-17i
[10,] -6.505213e-18+8.673617e-19i -8.673617e-19-1.734723e-18i  8.673617e-19+1.734723e-18i  1.734723e-18-1.734723e-18i
                            [,78]                       [,79]                       [,80]                       [,81]
 [1,] -1.517883e-18+8.673617e-19i  4.622232e-32+0.000000e+00i -2.602085e-18+1.734723e-18i  8.673617e-19+2.602085e-18i
 [2,]  1.387779e-17-8.673617e-19i  5.238529e-32-4.930381e-32i  2.602085e-18+1.734723e-18i -2.602085e-18-3.469447e-18i
 [3,]  4.336809e-19+2.602085e-18i  3.081488e-33+1.047706e-31i -8.673617e-19+3.469447e-18i -5.204170e-18-1.734723e-18i
 [4,]  1.192622e-18+0.000000e+00i -3.389637e-32+2.465190e-32i -4.336809e-19+2.168404e-17i  6.071532e-18-3.469447e-18i
 [5,]  4.336809e-19+0.000000e+00i -1.232595e-32+1.232595e-32i -2.168404e-19+3.469447e-18i -1.387779e-17+1.387779e-17i
 [6,] -6.288373e-18+1.474515e-17i  1.232595e-32-2.465190e-32i -1.084202e-18+8.673617e-19i  3.903128e-18-3.469447e-18i
 [7,] -2.602085e-18+1.734723e-18i  1.910523e-31-3.451266e-31i -2.818926e-18+1.734723e-18i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+8.673617e-19i  1.540744e-32+0.000000e+00i -4.336809e-19+4.857226e-17i -1.734723e-18+1.734723e-18i
 [9,]  1.951564e-18-1.734723e-18i -4.622232e-32+6.162976e-33i -8.673617e-19+8.673617e-19i  4.076600e-17+1.127570e-16i
[10,]  1.387779e-17+6.071532e-18i -3.081488e-33-1.232595e-32i -4.336809e-19+2.602085e-18i -8.673617e-19+0.000000e+00i
                            [,82]                       [,83]                       [,84]                       [,85]
 [1,]  3.469447e-18+5.204170e-18i  8.673617e-19+8.673617e-19i -8.673617e-19+0.000000e+00i  1.540744e-33+0.000000e+00i
 [2,]  1.908196e-17+2.255141e-17i -1.734723e-18+1.734723e-18i -2.168404e-18-8.673617e-19i  3.081488e-33+1.078521e-32i
 [3,] -2.602085e-18+3.469447e-18i -1.734723e-18+2.255141e-17i -1.734723e-18+8.673617e-19i -3.081488e-33+5.238529e-32i
 [4,]  1.734723e-18-3.469447e-18i  7.806256e-18+1.734723e-18i  1.734723e-18-1.127570e-17i  4.622232e-33+2.157042e-32i
 [5,]  8.673617e-19-1.734723e-18i  5.204170e-18+0.000000e+00i  1.734723e-18+8.673617e-19i  1.032298e-31-6.162976e-33i
 [6,] -1.301043e-17+2.775558e-17i -2.602085e-18-1.734723e-18i  0.000000e+00-6.938894e-18i  0.000000e+00-3.081488e-33i
 [7,] -4.336809e-19+3.469447e-18i -1.387779e-17+1.734723e-18i  2.168404e-19-2.602085e-18i -9.244464e-33+0.000000e+00i
 [8,]  5.637851e-18+0.000000e+00i -2.602085e-18+0.000000e+00i -7.155734e-18+6.938894e-18i -2.311116e-33-3.081488e-33i
 [9,]  2.602085e-18-1.734723e-18i  0.000000e+00-1.734723e-18i  1.734723e-18+0.000000e+00i -3.851860e-33+0.000000e+00i
[10,]  2.949030e-17+6.765422e-17i  8.673617e-19-3.469447e-18i  4.336809e-19-8.673617e-19i  1.540744e-33-9.244464e-33i
                            [,86]                       [,87]                       [,88]                       [,89]
 [1,] -1.734723e-18-2.602085e-18i  2.602085e-18+8.673617e-19i -1.734723e-18-1.561251e-17i  5.030698e-17+5.290907e-17i
 [2,]  1.431147e-17+1.474515e-17i -8.673617e-19+5.204170e-18i  0.000000e+00+1.040834e-17i  4.336809e-18+8.673617e-19i
 [3,] -8.673617e-19-1.734723e-18i -1.387779e-17-2.515349e-17i  1.734723e-18+3.469447e-18i  3.469447e-18-1.214306e-17i
 [4,] -1.344411e-17-1.734723e-18i  5.204170e-18-6.071532e-18i  2.168404e-17+2.688821e-17i  2.602085e-18+8.673617e-18i
 [5,]  3.035766e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -5.204170e-18-1.734723e-18i  5.464379e-17+2.775558e-17i
 [6,] -2.818926e-17+2.602085e-17i  6.938894e-18-6.071532e-18i -8.673617e-19-1.040834e-17i -2.602085e-18-1.734723e-18i
 [7,] -1.301043e-18-6.071532e-18i -5.377643e-17+2.862294e-17i -8.673617e-19-1.734723e-18i  8.673617e-19-1.127570e-17i
 [8,] -2.602085e-18+2.602085e-18i  8.673617e-19-3.469447e-18i -7.112366e-17+5.724587e-17i  5.204170e-18+1.040834e-17i
 [9,]  1.084202e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+3.469447e-18i  1.474515e-17-2.602085e-17i
[10,] -2.168404e-19+6.071532e-18i -4.336809e-19-3.469447e-18i  2.602085e-18-3.469447e-18i  6.071532e-18-1.734723e-18i
                            [,90]                       [,91]                       [,92]                       [,93]
 [1,] -6.071532e-18+5.204170e-18i -4.314083e-32-3.081488e-32i  8.673617e-18-2.385245e-18i -1.214306e-17+3.035766e-18i
 [2,] -1.214306e-17+1.301043e-18i -8.628166e-32-3.081488e-32i  1.734723e-18-2.168404e-18i  2.081668e-17+1.734723e-18i
 [3,]  1.734723e-18-7.806256e-18i -2.095412e-31+1.848893e-32i  0.000000e+00+8.673617e-19i  1.040834e-17-3.079134e-17i
 [4,] -6.071532e-18-6.938894e-18i  1.232595e-32-1.848893e-32i  0.000000e+00-8.673617e-19i  1.734723e-18-8.673617e-19i
 [5,]  4.336809e-18-4.336809e-19i -4.930381e-32+1.047706e-31i -1.734723e-18-4.336809e-18i -5.637851e-17+2.775558e-17i
 [6,]  4.119968e-17+2.775558e-17i  1.232595e-32+1.232595e-32i  6.938894e-18-9.107298e-18i -1.734723e-18+3.469447e-18i
 [7,]  2.602085e-18-2.602085e-18i  5.916457e-31+1.232595e-32i -8.673617e-19-1.734723e-18i  6.938894e-18+0.000000e+00i
 [8,] -2.602085e-18-6.938894e-18i  1.848893e-32-6.779273e-32i  3.989864e-17+2.515349e-17i -1.734723e-18-8.673617e-19i
 [9,]  3.035766e-18-8.673617e-19i -5.546678e-32+9.860761e-32i  4.336809e-18+0.000000e+00i  6.852158e-17+1.734723e-18i
[10,]  4.336809e-19-8.673617e-19i  0.000000e+00+6.162976e-33i  2.602085e-18+5.204170e-18i  1.734723e-18+7.806256e-18i
                            [,94]                       [,95]                       [,96]
 [1,] -1.040834e-17+2.168404e-18i  3.122502e-17+7.372575e-18i -1.561251e-17+5.009014e-17i
 [2,] -5.724587e-17-1.205633e-16i  8.673617e-18+4.163336e-17i -1.734723e-18-2.688821e-17i
 [3,] -2.081668e-17+2.602085e-18i  5.551115e-17-5.637851e-17i -1.734723e-18+1.214306e-17i
 [4,] -6.938894e-18+5.030698e-17i  0.000000e+00+1.040834e-17i  2.862294e-17-2.797242e-17i
 [5,] -6.938894e-18+3.469447e-18i  1.734723e-17+2.341877e-17i  8.673617e-19+5.637851e-18i
 [6,] -1.092876e-16+4.336809e-18i -1.734723e-18-1.040834e-17i  8.673617e-19-1.734723e-18i
 [7,]  3.469447e-18-1.561251e-17i -2.428613e-17+5.030698e-17i  3.469447e-18-3.903128e-18i
 [8,] -3.469447e-18+2.775558e-17i  1.127570e-17+8.673617e-18i -2.949030e-17+2.255141e-17i
 [9,]  0.000000e+00-1.734723e-18i -1.387779e-17-8.673617e-19i  2.602085e-18+4.770490e-18i
[10,]  2.775558e-17-3.209238e-17i -8.673617e-19-1.040834e-17i -8.673617e-19-1.301043e-17i
 [ достигнута getOption("max.print") -- пропущено 86 строк ]
plot(1:L, res_comp_wise[[1]][, 2])
Предупреждение в xy.coords(x, y, xlabel, ylabel, log) :
  мнимые части убраны при преобразовании

avr <- averaging(res_comp_wise)

for (i in 1:dim(res$t_series)[2]){
  plot(x, avr[i, ])
}
Ошибка в 1:dim(res$t_series)[2] :аргумент нулевой длины
n <- 96*2-1
x <- 0:(n-1)
L <- 96
y <- sin(2*pi/12 * x)

X <- hankel(y, L)

Ft <- dftmtx(L) / sqrt(L)
Ft_inv <- t(Conj(Ft))

component_wise_mult <- function(index){
  Ft %*% t(sweep(Ft_inv, 1, X[, index], '*'))
}


averaging <- function(res_comp_wise_mult){
  K <- dim(X)[2]
  counters <- rep(0, n)
  res <- matrix(0, nrow = n, ncol = L)
  for (i in 1:K){
    res[i:(i+L-1), ] <- res[i:(i+L-1), ] + res_comp_wise_mult[[i]]
    counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
  }
  for (i in 1:n){
    res[i, ] <- res[i, ] / counters[i]
  }
  res
}


res_comp_wise <- lapply(1:L, component_wise_mult)
print(res_comp_wise[[1]])
      [,1]                        [,2]                        [,3]                        [,4]                        [,5]
 [1,] 0+0i  1.387779e-17-4.374756e-17i  2.255141e-17+1.778092e-17i -1.561251e-17+1.994932e-17i -5.377643e-17-6.505213e-18i
 [2,] 0+0i  5.000000e-01+0.000000e+00i  6.938894e-18-6.776264e-17i  1.561251e-17-6.418477e-17i -6.938894e-18+1.170938e-17i
 [3,] 0+0i  1.040834e-17-2.569559e-17i  8.660254e-01+0.000000e+00i -3.989864e-17-3.165870e-17i -5.898060e-17-3.361027e-17i
 [4,] 0+0i -2.949030e-17+2.634611e-17i  6.938894e-17-2.667137e-17i  1.000000e+00-0.000000e+00i  2.949030e-17-1.994932e-17i
 [5,] 0+0i  5.204170e-18-4.987330e-18i -1.734723e-17-2.602085e-18i  2.949030e-17+0.000000e+00i  8.660254e-01-0.000000e+00i
 [6,] 0+0i  5.204170e-18+6.505213e-18i  0.000000e+00-3.187554e-17i -5.377643e-17-1.431147e-17i -3.469447e-18+1.144917e-16i
 [7,] 0+0i  3.469447e-18-4.770490e-18i -2.775558e-17-4.336809e-19i -3.469447e-18-6.071532e-18i  2.255141e-17-2.168404e-18i
 [8,] 0+0i -1.734723e-18+1.647987e-17i  0.000000e+00-8.673617e-18i -1.144917e-16+1.149254e-16i -6.938894e-18-1.214306e-17i
 [9,] 0+0i  0.000000e+00+6.071532e-18i  1.734723e-18-5.637851e-18i  0.000000e+00+1.734723e-18i  5.204170e-17-1.301043e-17i
[10,] 0+0i -8.673617e-19-4.336809e-19i -5.204170e-18-5.204170e-18i  2.949030e-17+5.204170e-18i  1.040834e-17+3.469447e-18i
                             [,6]                        [,7]                        [,8]                        [,9]
 [1,]  0.000000e+00+4.987330e-18i  5.777790e-34-3.274081e-33i -3.469447e-18+7.806256e-18i -2.602085e-18+0.000000e+00i
 [2,]  2.515349e-17-3.469447e-18i  3.851860e-34+1.637040e-33i  1.734723e-18+6.505213e-18i -1.040834e-17-7.806256e-18i
 [3,] -1.734723e-18+8.673617e-19i  1.213336e-32-9.629650e-35i -2.602085e-18+6.938894e-18i -1.040834e-17-2.645453e-17i
 [4,]  1.387779e-17-6.722053e-18i  0.000000e+00-2.311116e-33i -6.765422e-17+1.734723e-18i  8.673617e-18+1.734723e-18i
 [5,] -8.673617e-19+9.540979e-18i -3.851860e-34-4.188898e-33i  6.938894e-18+5.421011e-18i  0.000000e+00-7.372575e-18i
 [6,]  5.000000e-01-0.000000e+00i -9.629650e-34-2.888895e-33i -8.673617e-19-8.023096e-18i  1.214306e-17-1.691355e-17i
 [7,] -1.040834e-17-6.071532e-18i  1.224606e-16+0.000000e+00i  6.938894e-18+5.421011e-18i -1.040834e-17-8.239937e-18i
 [8,] -8.673617e-19-2.406929e-17i -7.896313e-33+9.629650e-34i -5.000000e-01-0.000000e+00i -1.214306e-17+5.811324e-17i
 [9,] -8.673617e-19+1.387779e-17i  9.629650e-34-5.488900e-33i -8.673617e-19+2.775558e-17i -8.660254e-01-0.000000e+00i
[10,] -8.673617e-19+2.385245e-18i -3.274081e-33-1.829633e-33i -2.255141e-17-4.987330e-18i -3.469447e-18+2.753874e-17i
                            [,10]                       [,11]                       [,12]                       [,13]
 [1,] -8.673617e-18+1.821460e-17i -1.734723e-18-8.673617e-19i -8.673617e-19+1.734723e-18i  0.000000e+00-3.851860e-34i
 [2,]  5.724587e-17+5.204170e-18i  7.806256e-18-1.040834e-17i  0.000000e+00+1.257675e-17i -3.851860e-34+2.311116e-33i
 [3,]  1.734723e-18-6.071532e-18i  5.030698e-17-2.775558e-17i  1.734723e-18+4.336809e-18i -3.466674e-33-3.274081e-33i
 [4,] -3.122502e-17+2.862294e-17i  6.938894e-18-6.071532e-18i  5.551115e-17+3.903128e-18i -7.703720e-34-4.237046e-33i
 [5,] -2.255141e-17+2.255141e-17i  1.387779e-17-2.211772e-17i  8.673617e-19-3.469447e-18i  2.465190e-32+9.629650e-34i
 [6,] -8.673617e-18+1.734723e-17i  2.255141e-17-3.035766e-18i  2.602085e-18+1.474515e-17i -1.540744e-33-1.155558e-33i
 [7,] -6.938894e-18+3.035766e-18i -1.144917e-16+7.372575e-18i -2.602085e-18+2.168404e-18i -5.007418e-33+1.925930e-34i
 [8,] -2.949030e-17-6.808790e-17i -8.673617e-18-2.558717e-17i -4.336809e-17+2.537033e-17i  3.466674e-33+1.540744e-33i
 [9,]  1.734723e-18+7.719519e-17i  3.469447e-18-1.257675e-17i -2.602085e-18-2.081668e-17i  1.540744e-33+2.503709e-33i
[10,] -1.000000e+00-0.000000e+00i  2.081668e-17-9.887924e-17i  1.734723e-17-9.540979e-18i  5.007418e-33+3.851860e-33i
                            [,14]                       [,15]                       [,16]                       [,17]
 [1,]  4.770490e-18-1.734723e-18i  6.938894e-18-1.734723e-18i  1.734723e-18-8.673617e-18i  1.214306e-17+3.469447e-18i
 [2,]  1.647987e-17-1.604619e-17i  2.602085e-18+6.071532e-18i -1.734723e-18+3.469447e-18i  7.806256e-18-6.071532e-18i
 [3,]  5.204170e-18+2.602085e-18i -1.561251e-17+2.428613e-17i  2.602085e-18-6.938894e-18i  0.000000e+00+9.540979e-18i
 [4,]  0.000000e+00-4.770490e-18i -1.734723e-18-1.214306e-17i  8.673617e-19-2.602085e-17i  8.673617e-19+1.734723e-18i
 [5,]  3.469447e-18-9.540979e-18i  1.734723e-18-1.734723e-18i  6.938894e-18+1.214306e-17i -4.423545e-17-3.469447e-18i
 [6,] -8.239937e-17+0.000000e+00i  1.734723e-18-2.602085e-18i -1.734723e-18-2.602085e-18i  2.602085e-18+9.540979e-18i
 [7,] -2.602085e-18-1.387779e-17i -1.422473e-16+9.540979e-18i  0.000000e+00+6.071532e-18i  1.561251e-17-1.040834e-17i
 [8,]  1.734723e-18-1.387779e-17i  6.938894e-18-1.647987e-17i -1.994932e-16+1.734723e-18i  1.734723e-18+1.647987e-17i
 [9,] -5.204170e-18-1.301043e-18i  3.469447e-18+2.732189e-17i -3.469447e-18+1.561251e-17i  5.204170e-17+0.000000e+00i
[10,]  2.688821e-17-2.818926e-18i  0.000000e+00+5.637851e-18i -2.602085e-17-7.979728e-17i  1.734723e-18-2.602085e-17i
                            [,18]                       [,19]                       [,20]                       [,21]
 [1,]  1.301043e-18+3.469447e-18i  2.118523e-33+0.000000e+00i  1.734723e-18+4.336809e-18i  1.734723e-18+1.561251e-17i
 [2,]  8.239937e-18-1.734723e-18i -5.777790e-34-1.925930e-33i  4.336809e-19+8.673617e-19i -4.336809e-18-3.469447e-18i
 [3,]  0.000000e+00-8.673617e-19i  1.117039e-32+7.703720e-34i  2.168404e-18+8.673617e-19i -8.673617e-19+0.000000e+00i
 [4,] -2.168404e-18+8.673617e-19i  1.925930e-33+0.000000e+00i -1.257675e-17-1.734723e-18i  5.204170e-18+1.040834e-17i
 [5,] -1.301043e-18+0.000000e+00i  2.311116e-33+7.703720e-34i  4.336809e-18+1.734723e-18i -1.301043e-17-2.862294e-17i
 [6,] -1.257675e-17-1.647987e-17i -3.851860e-34+4.622232e-33i  4.336809e-19+0.000000e+00i  1.734723e-18-2.602085e-18i
 [7,]  0.000000e+00+1.734723e-18i -2.465190e-32-3.851860e-34i  4.336809e-19-8.673617e-19i  1.734723e-18-2.602085e-18i
 [8,]  6.938894e-18+1.734723e-18i -1.540744e-33+3.851860e-34i -4.293441e-17+5.377643e-17i -8.673617e-19-6.071532e-18i
 [9,] -8.673617e-19+3.469447e-18i  1.540744e-33-3.851860e-34i  2.602085e-18-3.035766e-18i -5.377643e-17+5.204170e-17i
[10,] -1.387779e-17+1.301043e-17i -7.703720e-34-6.933348e-33i  8.673617e-19+1.561251e-17i -2.602085e-18-5.204170e-18i
                            [,22]                       [,23]                       [,24]                       [,25]
 [1,]  4.336809e-19+1.734723e-18i  6.071532e-18-5.204170e-18i -1.355253e-18-8.673617e-19i  0.000000e+00+0.000000e+00i
 [2,]  1.214306e-17+1.387779e-17i -2.602085e-18+0.000000e+00i -2.602085e-18-8.673617e-19i -4.814825e-35+0.000000e+00i
 [3,]  4.336809e-18-1.734723e-18i -4.163336e-17+0.000000e+00i  8.673617e-19-8.673617e-19i -3.274081e-33+0.000000e+00i
 [4,] -1.734723e-18-1.387779e-17i  1.734723e-18-1.734723e-18i -1.994932e-17+0.000000e+00i  1.925930e-34+2.311116e-33i
 [5,]  6.938894e-18+6.938894e-18i -4.336809e-19+6.938894e-18i  2.168404e-18+1.734723e-18i  0.000000e+00-2.311116e-33i
 [6,] -5.464379e-17-5.204170e-17i  0.000000e+00+6.938894e-18i  2.602085e-18-2.602085e-18i -2.503709e-33+0.000000e+00i
 [7,]  3.469447e-18-6.938894e-18i -4.336809e-17-5.724587e-17i  1.734723e-18-8.673617e-19i  3.851860e-34-2.311116e-33i
 [8,] -1.734723e-18+2.255141e-17i -2.602085e-18-1.214306e-17i -4.119968e-17-1.127570e-17i -3.851860e-34-3.081488e-33i
 [9,] -3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i  8.673617e-19-2.602085e-18i  0.000000e+00-7.703720e-34i
[10,] -8.847090e-17+5.464379e-17i -1.734723e-18-1.387779e-17i -4.336809e-19+1.734723e-18i -1.155558e-33+0.000000e+00i
                            [,26]                       [,27]                       [,28]                       [,29]
 [1,] -2.710505e-19+0.000000e+00i  2.385245e-18+5.204170e-18i -1.734723e-18-3.469447e-18i  1.604619e-17+1.387779e-17i
 [2,]  1.382358e-17-1.301043e-17i  6.071532e-18+6.938894e-18i  0.000000e+00-6.938894e-18i -4.336809e-19+1.734723e-18i
 [3,]  5.421011e-20-8.673617e-19i  1.431147e-17+1.734723e-18i -8.673617e-19-3.469447e-18i -6.505213e-19+0.000000e+00i
 [4,]  3.252607e-18-8.673617e-19i -1.517883e-18+0.000000e+00i -8.673617e-19+1.734723e-18i  8.673617e-19-1.734723e-18i
 [5,] -8.673617e-19+2.602085e-18i  1.084202e-18+0.000000e+00i  2.168404e-18-1.734723e-18i -2.775558e-17-2.949030e-17i
 [6,]  6.938894e-18+0.000000e+00i -4.336809e-19+1.734723e-18i -5.637851e-18+0.000000e+00i -1.301043e-18-1.734723e-18i
 [7,]  4.553649e-18+3.469447e-18i  2.862294e-17-3.989864e-17i  2.602085e-18-1.734723e-18i  1.734723e-18+0.000000e+00i
 [8,]  8.673617e-19+0.000000e+00i  2.602085e-18+1.734723e-18i  5.421011e-17+1.387779e-17i  3.469447e-18+3.469447e-18i
 [9,]  4.336809e-19+1.734723e-18i -1.301043e-18+1.734723e-18i -3.469447e-18-1.734723e-18i  4.336809e-19+1.214306e-17i
[10,]  4.336809e-19-2.602085e-18i -1.734723e-18-3.469447e-18i  8.673617e-19+5.204170e-18i  6.505213e-18+5.204170e-18i
                            [,30]                       [,31]                       [,32]                       [,33]
 [1,]  6.505213e-19+8.673617e-19i  0.000000e+00+0.000000e+00i  1.301043e-18-8.673617e-19i -2.688821e-17+0.000000e+00i
 [2,]  7.155734e-18+8.673617e-19i  4.622232e-33-3.081488e-33i -4.336809e-19-8.673617e-19i -3.469447e-18+1.734723e-18i
 [3,]  8.673617e-19+8.673617e-19i -2.619265e-32+0.000000e+00i  1.301043e-18+2.602085e-18i -6.938894e-18-1.734723e-18i
 [4,]  1.084202e-18+0.000000e+00i  4.622232e-33+0.000000e+00i -6.505213e-19+7.806256e-18i  1.301043e-18+3.469447e-18i
 [5,] -1.084202e-18+0.000000e+00i -2.696302e-32-1.540744e-32i  8.673617e-19+3.469447e-18i -1.474515e-17+0.000000e+00i
 [6,] -5.854692e-18-2.168404e-17i -1.540744e-33+6.162976e-33i -2.168404e-19+0.000000e+00i -1.301043e-18+1.734723e-18i
 [7,] -1.517883e-18-1.734723e-18i  2.187856e-31-4.930381e-32i -6.505213e-19-8.673617e-19i  5.637851e-18-1.734723e-18i
 [8,] -3.035766e-18+3.469447e-18i -6.162976e-33+0.000000e+00i -6.505213e-18+2.081668e-17i -3.469447e-18-3.469447e-18i
 [9,]  1.517883e-18+2.602085e-18i -2.465190e-32+3.081488e-33i  0.000000e+00+8.673617e-19i -6.722053e-17-2.775558e-17i
[10,] -6.505213e-19-6.071532e-18i -1.386670e-32-1.848893e-32i  2.168404e-19-3.469447e-18i -1.734723e-18-3.469447e-18i
                            [,34]                       [,35]                       [,36]                       [,37]
 [1,] -1.734723e-18+5.204170e-18i  4.336809e-18+0.000000e+00i  8.673617e-19-8.673617e-19i  2.311116e-33+0.000000e+00i
 [2,]  0.000000e+00+1.561251e-17i -8.673617e-19-8.673617e-19i  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i
 [3,]  6.071532e-18+1.734723e-18i -1.474515e-17-3.989864e-17i -8.673617e-19-8.673617e-19i -7.703720e-34+0.000000e+00i
 [4,]  1.734723e-18+0.000000e+00i  1.734723e-18+0.000000e+00i  1.431147e-17+0.000000e+00i  1.540744e-33+0.000000e+00i
 [5,] -8.673617e-19+3.469447e-18i -1.734723e-18-1.734723e-18i -4.336809e-19-8.673617e-19i -2.465190e-32-1.232595e-32i
 [6,]  2.515349e-17+2.602085e-17i -8.673617e-19+0.000000e+00i -2.602085e-18+0.000000e+00i -1.155558e-33+7.703720e-34i
 [7,]  7.372575e-18+3.469447e-18i -8.673617e-19+1.387779e-17i  2.818926e-18+8.673617e-19i -5.777790e-33+0.000000e+00i
 [8,]  1.301043e-18+6.938894e-18i  3.469447e-18+3.469447e-18i -2.168404e-17+6.938894e-18i -7.703720e-34+0.000000e+00i
 [9,]  8.673617e-19+3.469447e-18i  0.000000e+00-1.734723e-18i -1.734723e-18+8.673617e-19i  3.851860e-34+0.000000e+00i
[10,] -4.336809e-17-4.336809e-17i  5.204170e-18+6.938894e-18i  3.035766e-18+0.000000e+00i -1.155558e-33-3.081488e-33i
                            [,38]                       [,39]                       [,40]                       [,41]
 [1,] -8.673617e-19+0.000000e+00i -6.938894e-18-8.673617e-19i -1.734723e-18+1.734723e-18i  6.938894e-18-6.071532e-18i
 [2,]  1.431147e-17-3.903128e-18i  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i
 [3,]  0.000000e+00+8.673617e-19i -2.688821e-17+0.000000e+00i -1.734723e-18+0.000000e+00i  4.336809e-18+3.469447e-18i
 [4,]  2.602085e-18+0.000000e+00i -4.336809e-18+0.000000e+00i  1.301043e-17-2.428613e-17i -2.602085e-18-2.602085e-18i
 [5,]  8.673617e-19+8.673617e-19i -1.734723e-18+0.000000e+00i  1.734723e-18+1.734723e-18i -2.862294e-17+2.862294e-17i
 [6,]  4.336809e-19+2.688821e-17i -8.673617e-19-1.734723e-18i  2.602085e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.301043e-18-2.602085e-18i  2.688821e-17+2.862294e-17i  2.602085e-18+1.734723e-18i -2.602085e-18+0.000000e+00i
 [8,] -4.770490e-18+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.163336e-17i -1.734723e-18-8.673617e-19i
 [9,] -1.517883e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+2.775558e-17i
[10,]  2.168404e-19-6.938894e-18i  4.336809e-19+1.734723e-18i -6.071532e-18+0.000000e+00i  3.469447e-18+1.734723e-18i
                            [,42]                       [,43]                       [,44]                       [,45]
 [1,]  0.000000e+00+4.336809e-19i  0.000000e+00+3.851860e-34i  8.673617e-19+0.000000e+00i  1.561251e-17+4.336809e-19i
 [2,]  1.387779e-17+1.040834e-17i -1.540744e-33+0.000000e+00i -3.469447e-18+0.000000e+00i  0.000000e+00+1.301043e-18i
 [3,] -8.673617e-19+0.000000e+00i  0.000000e+00+3.081488e-33i  1.734723e-18+0.000000e+00i -1.734723e-18-4.336809e-19i
 [4,]  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i -1.474515e-17-1.040834e-17i -1.734723e-18-8.673617e-19i
 [5,]  0.000000e+00+4.336809e-19i  0.000000e+00+7.703720e-34i  0.000000e+00+0.000000e+00i -1.301043e-17+1.474515e-17i
 [6,] -1.344411e-17+3.903128e-18i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i -1.309632e-32+1.232595e-32i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+0.000000e+00i  0.000000e+00-1.540744e-33i  4.336809e-19+4.163336e-17i -1.734723e-18+8.673617e-19i
 [9,] -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i  1.301043e-18+0.000000e+00i -1.474515e-17+1.387779e-17i
[10,]  2.038300e-17-6.938894e-18i -3.851860e-33-3.081488e-33i -8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i
                            [,46]                       [,47]                       [,48]                       [,49]
 [1,]  1.734723e-18+4.336809e-19i -1.734723e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,] -2.775558e-17+2.081668e-17i  1.734723e-18+1.301043e-18i -8.673617e-19-2.168404e-19i  1.540744e-33-2.888895e-34i
 [3,]  3.469447e-18+0.000000e+00i -1.387779e-17-3.122502e-17i -8.673617e-19+2.168404e-19i -1.540744e-33+3.851860e-34i
 [4,]  1.734723e-18+3.469447e-18i -1.734723e-18+0.000000e+00i -6.938894e-18+4.119968e-18i  0.000000e+00-3.851860e-34i
 [5,] -1.734723e-18+8.673617e-19i -1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i  1.540744e-33+0.000000e+00i
 [6,] -1.387779e-17+4.857226e-17i -5.204170e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  0.000000e+00-3.851860e-34i
 [7,]  1.734723e-18+8.673617e-19i -1.214306e-17+6.938894e-18i -8.673617e-19-4.336809e-19i -1.540744e-33+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -8.673617e-19+3.469447e-18i  0.000000e+00+1.540744e-33i
 [9,]  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.336809e-19i  1.232595e-32+1.309632e-32i
[10,]  1.214306e-17+3.122502e-17i -8.673617e-19-8.673617e-19i  8.673617e-19+0.000000e+00i  4.622232e-33+7.703720e-34i
                            [,50]                       [,51]                       [,52]                       [,53]
 [1,]  0.000000e+00+1.084202e-19i  0.000000e+00+6.505213e-19i  0.000000e+00+8.673617e-19i -1.214306e-17-1.691355e-17i
 [2,]  1.040834e-17-1.517883e-18i -3.469447e-18-1.084202e-18i  1.734723e-18+0.000000e+00i  1.734723e-18+6.505213e-19i
 [3,]  0.000000e+00-3.252607e-19i  6.938894e-18-3.800083e-18i  3.469447e-18+4.336809e-19i -1.734723e-18+0.000000e+00i
 [4,]  0.000000e+00-3.252607e-19i -5.204170e-18+0.000000e+00i  1.387779e-17-6.938894e-18i  0.000000e+00-4.336809e-19i
 [5,] -8.673617e-19-2.168404e-19i  1.734723e-18-2.168404e-19i  3.469447e-18+0.000000e+00i  2.775558e-17+3.642919e-17i
 [6,]  6.938894e-18-6.938894e-18i  0.000000e+00+2.168404e-19i  5.204170e-18-4.336809e-19i  1.734723e-18+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i  1.387779e-17+6.938894e-18i  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  1.734723e-18-1.517883e-17i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00+4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  6.938894e-18+3.035766e-18i
[10,]  6.071532e-18-8.673617e-18i -1.734723e-18-8.673617e-19i -5.204170e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
                            [,54]                       [,55]                       [,56]                       [,57]
 [1,] -8.673617e-19-4.336809e-19i -1.848893e-32-3.081488e-33i  0.000000e+00+4.336809e-19i  0.000000e+00-3.469447e-18i
 [2,] -8.673617e-19+7.372575e-18i  0.000000e+00+0.000000e+00i  3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
 [3,]  8.673617e-19-4.336809e-19i  6.162976e-33-7.395571e-32i  1.734723e-18-4.336809e-19i -1.734723e-18+8.673617e-19i
 [4,]  0.000000e+00+0.000000e+00i -1.232595e-32-4.622232e-33i -1.994932e-17+3.686287e-18i  0.000000e+00+0.000000e+00i
 [5,]  1.734723e-18-4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+2.168404e-19i -1.734723e-18-2.775558e-17i
 [6,] -2.775558e-17-4.553649e-18i -1.232595e-32+0.000000e+00i  0.000000e+00+4.336809e-19i  3.469447e-18+0.000000e+00i
 [7,]  1.734723e-18+2.168404e-19i -1.725633e-31-2.762130e-32i -8.673617e-19-4.336809e-19i -1.734723e-18-4.336809e-19i
 [8,]  2.602085e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+4.119968e-18i  1.734723e-18+4.336809e-19i
 [9,] -8.673617e-19+4.336809e-19i  6.162976e-33+0.000000e+00i  1.734723e-18+0.000000e+00i -6.938894e-17+6.193259e-17i
[10,]  6.938894e-18+7.589415e-18i  0.000000e+00+6.162976e-33i  0.000000e+00+2.168404e-19i  1.734723e-18-4.336809e-19i
                            [,58]                       [,59]                       [,60]                       [,61]
 [1,] -1.734723e-18+8.673617e-19i  1.734723e-18+8.673617e-19i  0.000000e+00-4.336809e-19i  6.162976e-33+0.000000e+00i
 [2,]  1.734723e-18-2.775558e-17i  1.734723e-18-8.673617e-19i  0.000000e+00+4.336809e-19i  2.465190e-32-6.162976e-33i
 [3,]  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i  0.000000e+00-4.336809e-19i  0.000000e+00+1.848893e-32i
 [4,] -6.938894e-18+8.673617e-19i  0.000000e+00-8.673617e-19i -7.806256e-18+3.469447e-18i -1.232595e-32+6.162976e-33i
 [5,] -1.734723e-18-8.673617e-19i -1.734723e-18+0.000000e+00i  0.000000e+00+0.000000e+00i -9.860761e-32+9.860761e-32i
 [6,] -2.775558e-17+1.301043e-17i -1.734723e-18-4.336809e-19i  2.602085e-18+0.000000e+00i  6.162976e-33+0.000000e+00i
 [7,]  1.734723e-18+4.336809e-19i  0.000000e+00-3.035766e-18i  0.000000e+00-2.168404e-19i -6.162976e-33+0.000000e+00i
 [8,]  0.000000e+00-4.336809e-19i -3.469447e-18-4.336809e-19i -1.387779e-17+1.387779e-17i  0.000000e+00-3.081488e-33i
 [9,] -1.734723e-18+4.336809e-19i  1.734723e-18-4.336809e-19i  8.673617e-19-4.336809e-19i  0.000000e+00+3.081488e-33i
[10,] -3.469447e-17+6.707597e-17i -1.734723e-18+2.168404e-19i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
                            [,62]                       [,63]                       [,64]                       [,65]
 [1,]  0.000000e+00-8.673617e-19i  7.806256e-18-8.673617e-19i  1.734723e-18-1.734723e-18i  1.387779e-17-1.387779e-17i
 [2,]  7.806256e-18-3.469447e-18i -1.734723e-18-1.734723e-18i -1.734723e-18+1.734723e-18i  8.673617e-19+0.000000e+00i
 [3,]  1.734723e-18-4.336809e-19i -1.387779e-17-2.775558e-17i -4.336809e-18+1.734723e-18i -7.806256e-18+8.673617e-19i
 [4,]  0.000000e+00+4.336809e-19i -1.734723e-18+0.000000e+00i  2.602085e-18-6.938894e-18i  0.000000e+00+0.000000e+00i
 [5,] -8.673617e-19+0.000000e+00i  8.673617e-19+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+6.938894e-18i
 [6,]  2.081668e-17-1.040834e-17i  0.000000e+00+0.000000e+00i  0.000000e+00+8.673617e-19i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+4.336809e-19i  1.214306e-17-2.081668e-17i  1.734723e-18-8.673617e-19i  7.806256e-18-8.673617e-19i
 [8,]  0.000000e+00+0.000000e+00i -3.469447e-18-8.673617e-19i  1.561251e-17+6.938894e-18i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00-6.505213e-19i  0.000000e+00+4.336809e-19i  1.734723e-18-8.673617e-19i -1.734723e-18+6.071532e-18i
[10,]  6.938894e-18+6.938894e-18i  0.000000e+00-8.673617e-19i  1.734723e-18+0.000000e+00i  3.469447e-18+8.673617e-19i
                            [,66]                       [,67]                       [,68]                       [,69]
 [1,] -4.336809e-19-8.673617e-19i  6.162976e-33+1.848893e-32i  6.505213e-19+0.000000e+00i  4.336809e-19-1.214306e-17i
 [2,]  4.336809e-19-6.071532e-18i -9.244464e-33+1.232595e-32i  4.770490e-18-8.673617e-19i  8.673617e-19+0.000000e+00i
 [3,]  1.301043e-18-1.734723e-18i -9.860761e-32+9.860761e-32i  1.301043e-18+0.000000e+00i -4.336809e-19-1.734723e-18i
 [4,] -3.469447e-18+3.469447e-18i  1.232595e-32-3.081488e-32i -1.951564e-17+6.071532e-18i  3.469447e-18-3.469447e-18i
 [5,] -1.734723e-18+0.000000e+00i  2.465190e-32-6.162976e-33i  3.903128e-18-2.602085e-18i  2.775558e-17-1.387779e-17i
 [6,] -5.637851e-18+6.938894e-18i  6.162976e-33-1.232595e-32i  3.035766e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.734723e-18-4.336809e-19i -4.930381e-32+4.314083e-32i -4.336809e-19-8.673617e-19i  4.336809e-18+0.000000e+00i
 [8,] -8.673617e-19+0.000000e+00i  0.000000e+00-1.232595e-32i  1.301043e-18+6.938894e-18i  0.000000e+00+8.673617e-19i
 [9,]  0.000000e+00+0.000000e+00i  6.162976e-33-6.162976e-33i -8.673617e-19+0.000000e+00i  1.561251e-17+0.000000e+00i
[10,]  7.806256e-18+1.734723e-17i -1.232595e-32+0.000000e+00i  3.469447e-18-4.336809e-19i  1.734723e-18-8.673617e-19i
                            [,70]                       [,71]                       [,72]                       [,73]
 [1,]  2.168404e-18+3.469447e-18i -6.938894e-18+1.734723e-18i  3.252607e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,]  8.673617e-19-2.775558e-17i -1.301043e-18+3.469447e-18i -2.168404e-19+0.000000e+00i -6.740755e-33+3.081488e-33i
 [3,]  2.602085e-18+3.469447e-18i -1.214306e-17-6.938894e-18i -4.336809e-19-8.673617e-19i -3.851860e-34+3.081488e-33i
 [4,]  1.734723e-18-5.204170e-18i -3.903128e-18+0.000000e+00i -5.637851e-18-6.938894e-18i  2.696302e-33+0.000000e+00i
 [5,] -1.734723e-18-1.734723e-18i  6.071532e-18-1.734723e-18i -4.336809e-19+8.673617e-19i -2.157042e-32+0.000000e+00i
 [6,]  1.474515e-17-2.775558e-17i  0.000000e+00+0.000000e+00i  4.336809e-19-8.673617e-19i -6.933348e-33+3.081488e-33i
 [7,]  6.938894e-18-5.204170e-18i -4.163336e-17+1.387779e-17i -4.336809e-19-8.673617e-19i  8.474092e-33+0.000000e+00i
 [8,] -1.734723e-18+0.000000e+00i  0.000000e+00-8.673617e-19i  1.387779e-17-1.301043e-17i  3.081488e-33+0.000000e+00i
 [9,]  3.469447e-18-3.469447e-18i  0.000000e+00+0.000000e+00i -1.734723e-18+8.673617e-19i -2.465190e-32+1.232595e-32i
[10,]  0.000000e+00+1.040834e-17i -1.734723e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  1.540744e-33+0.000000e+00i
                            [,74]                       [,75]                       [,76]                       [,77]
 [1,]  1.084202e-18-8.673617e-19i -4.770490e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -1.344411e-17-2.775558e-17i
 [2,] -6.830474e-18+0.000000e+00i -1.192622e-18+1.734723e-18i -1.734723e-18-6.938894e-18i -3.035766e-18+1.734723e-18i
 [3,] -7.589415e-19-8.673617e-19i  4.141652e-17+1.387779e-17i  8.673617e-19-3.469447e-18i  7.372575e-18-1.734723e-18i
 [4,]  2.168404e-19+3.469447e-18i  2.168404e-18-1.734723e-18i  2.862294e-17+1.734723e-18i -2.168404e-19+0.000000e+00i
 [5,]  8.673617e-19-8.673617e-19i  4.770490e-18-1.734723e-18i -5.637851e-18+1.734723e-18i  4.293441e-17+1.734723e-18i
 [6,]  1.973248e-17+6.071532e-18i  6.505213e-19+0.000000e+00i -6.505213e-18-1.734723e-18i -1.734723e-18+0.000000e+00i
 [7,]  2.602085e-18-2.602085e-18i  1.301043e-18-1.734723e-18i -2.602085e-18+0.000000e+00i -2.168404e-18-6.938894e-18i
 [8,] -8.673617e-19+0.000000e+00i  4.770490e-18-3.469447e-18i -1.431147e-17-1.734723e-18i -1.301043e-18+1.734723e-18i
 [9,] -1.734723e-18+1.734723e-18i  4.336809e-18+0.000000e+00i  0.000000e+00+3.469447e-18i  1.387779e-17-1.387779e-17i
[10,] -6.505213e-18+8.673617e-19i -8.673617e-19-1.734723e-18i  8.673617e-19+1.734723e-18i  1.734723e-18-1.734723e-18i
                            [,78]                       [,79]                       [,80]                       [,81]
 [1,] -1.517883e-18+8.673617e-19i  4.622232e-32+0.000000e+00i -2.602085e-18+1.734723e-18i  8.673617e-19+2.602085e-18i
 [2,]  1.387779e-17-8.673617e-19i  5.238529e-32-4.930381e-32i  2.602085e-18+1.734723e-18i -2.602085e-18-3.469447e-18i
 [3,]  4.336809e-19+2.602085e-18i  3.081488e-33+1.047706e-31i -8.673617e-19+3.469447e-18i -5.204170e-18-1.734723e-18i
 [4,]  1.192622e-18+0.000000e+00i -3.389637e-32+2.465190e-32i -4.336809e-19+2.168404e-17i  6.071532e-18-3.469447e-18i
 [5,]  4.336809e-19+0.000000e+00i -1.232595e-32+1.232595e-32i -2.168404e-19+3.469447e-18i -1.387779e-17+1.387779e-17i
 [6,] -6.288373e-18+1.474515e-17i  1.232595e-32-2.465190e-32i -1.084202e-18+8.673617e-19i  3.903128e-18-3.469447e-18i
 [7,] -2.602085e-18+1.734723e-18i  1.910523e-31-3.451266e-31i -2.818926e-18+1.734723e-18i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+8.673617e-19i  1.540744e-32+0.000000e+00i -4.336809e-19+4.857226e-17i -1.734723e-18+1.734723e-18i
 [9,]  1.951564e-18-1.734723e-18i -4.622232e-32+6.162976e-33i -8.673617e-19+8.673617e-19i  4.076600e-17+1.127570e-16i
[10,]  1.387779e-17+6.071532e-18i -3.081488e-33-1.232595e-32i -4.336809e-19+2.602085e-18i -8.673617e-19+0.000000e+00i
                            [,82]                       [,83]                       [,84]                       [,85]
 [1,]  3.469447e-18+5.204170e-18i  8.673617e-19+8.673617e-19i -8.673617e-19+0.000000e+00i  1.540744e-33+0.000000e+00i
 [2,]  1.908196e-17+2.255141e-17i -1.734723e-18+1.734723e-18i -2.168404e-18-8.673617e-19i  3.081488e-33+1.078521e-32i
 [3,] -2.602085e-18+3.469447e-18i -1.734723e-18+2.255141e-17i -1.734723e-18+8.673617e-19i -3.081488e-33+5.238529e-32i
 [4,]  1.734723e-18-3.469447e-18i  7.806256e-18+1.734723e-18i  1.734723e-18-1.127570e-17i  4.622232e-33+2.157042e-32i
 [5,]  8.673617e-19-1.734723e-18i  5.204170e-18+0.000000e+00i  1.734723e-18+8.673617e-19i  1.032298e-31-6.162976e-33i
 [6,] -1.301043e-17+2.775558e-17i -2.602085e-18-1.734723e-18i  0.000000e+00-6.938894e-18i  0.000000e+00-3.081488e-33i
 [7,] -4.336809e-19+3.469447e-18i -1.387779e-17+1.734723e-18i  2.168404e-19-2.602085e-18i -9.244464e-33+0.000000e+00i
 [8,]  5.637851e-18+0.000000e+00i -2.602085e-18+0.000000e+00i -7.155734e-18+6.938894e-18i -2.311116e-33-3.081488e-33i
 [9,]  2.602085e-18-1.734723e-18i  0.000000e+00-1.734723e-18i  1.734723e-18+0.000000e+00i -3.851860e-33+0.000000e+00i
[10,]  2.949030e-17+6.765422e-17i  8.673617e-19-3.469447e-18i  4.336809e-19-8.673617e-19i  1.540744e-33-9.244464e-33i
                            [,86]                       [,87]                       [,88]                       [,89]
 [1,] -1.734723e-18-2.602085e-18i  2.602085e-18+8.673617e-19i -1.734723e-18-1.561251e-17i  5.030698e-17+5.290907e-17i
 [2,]  1.431147e-17+1.474515e-17i -8.673617e-19+5.204170e-18i  0.000000e+00+1.040834e-17i  4.336809e-18+8.673617e-19i
 [3,] -8.673617e-19-1.734723e-18i -1.387779e-17-2.515349e-17i  1.734723e-18+3.469447e-18i  3.469447e-18-1.214306e-17i
 [4,] -1.344411e-17-1.734723e-18i  5.204170e-18-6.071532e-18i  2.168404e-17+2.688821e-17i  2.602085e-18+8.673617e-18i
 [5,]  3.035766e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -5.204170e-18-1.734723e-18i  5.464379e-17+2.775558e-17i
 [6,] -2.818926e-17+2.602085e-17i  6.938894e-18-6.071532e-18i -8.673617e-19-1.040834e-17i -2.602085e-18-1.734723e-18i
 [7,] -1.301043e-18-6.071532e-18i -5.377643e-17+2.862294e-17i -8.673617e-19-1.734723e-18i  8.673617e-19-1.127570e-17i
 [8,] -2.602085e-18+2.602085e-18i  8.673617e-19-3.469447e-18i -7.112366e-17+5.724587e-17i  5.204170e-18+1.040834e-17i
 [9,]  1.084202e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+3.469447e-18i  1.474515e-17-2.602085e-17i
[10,] -2.168404e-19+6.071532e-18i -4.336809e-19-3.469447e-18i  2.602085e-18-3.469447e-18i  6.071532e-18-1.734723e-18i
                            [,90]                       [,91]                       [,92]                       [,93]
 [1,] -6.071532e-18+5.204170e-18i -4.314083e-32-3.081488e-32i  8.673617e-18-2.385245e-18i -1.214306e-17+3.035766e-18i
 [2,] -1.214306e-17+1.301043e-18i -8.628166e-32-3.081488e-32i  1.734723e-18-2.168404e-18i  2.081668e-17+1.734723e-18i
 [3,]  1.734723e-18-7.806256e-18i -2.095412e-31+1.848893e-32i  0.000000e+00+8.673617e-19i  1.040834e-17-3.079134e-17i
 [4,] -6.071532e-18-6.938894e-18i  1.232595e-32-1.848893e-32i  0.000000e+00-8.673617e-19i  1.734723e-18-8.673617e-19i
 [5,]  4.336809e-18-4.336809e-19i -4.930381e-32+1.047706e-31i -1.734723e-18-4.336809e-18i -5.637851e-17+2.775558e-17i
 [6,]  4.119968e-17+2.775558e-17i  1.232595e-32+1.232595e-32i  6.938894e-18-9.107298e-18i -1.734723e-18+3.469447e-18i
 [7,]  2.602085e-18-2.602085e-18i  5.916457e-31+1.232595e-32i -8.673617e-19-1.734723e-18i  6.938894e-18+0.000000e+00i
 [8,] -2.602085e-18-6.938894e-18i  1.848893e-32-6.779273e-32i  3.989864e-17+2.515349e-17i -1.734723e-18-8.673617e-19i
 [9,]  3.035766e-18-8.673617e-19i -5.546678e-32+9.860761e-32i  4.336809e-18+0.000000e+00i  6.852158e-17+1.734723e-18i
[10,]  4.336809e-19-8.673617e-19i  0.000000e+00+6.162976e-33i  2.602085e-18+5.204170e-18i  1.734723e-18+7.806256e-18i
                            [,94]                       [,95]                       [,96]
 [1,] -1.040834e-17+2.168404e-18i  3.122502e-17+7.372575e-18i -1.561251e-17+5.009014e-17i
 [2,] -5.724587e-17-1.205633e-16i  8.673617e-18+4.163336e-17i -1.734723e-18-2.688821e-17i
 [3,] -2.081668e-17+2.602085e-18i  5.551115e-17-5.637851e-17i -1.734723e-18+1.214306e-17i
 [4,] -6.938894e-18+5.030698e-17i  0.000000e+00+1.040834e-17i  2.862294e-17-2.797242e-17i
 [5,] -6.938894e-18+3.469447e-18i  1.734723e-17+2.341877e-17i  8.673617e-19+5.637851e-18i
 [6,] -1.092876e-16+4.336809e-18i -1.734723e-18-1.040834e-17i  8.673617e-19-1.734723e-18i
 [7,]  3.469447e-18-1.561251e-17i -2.428613e-17+5.030698e-17i  3.469447e-18-3.903128e-18i
 [8,] -3.469447e-18+2.775558e-17i  1.127570e-17+8.673617e-18i -2.949030e-17+2.255141e-17i
 [9,]  0.000000e+00-1.734723e-18i -1.387779e-17-8.673617e-19i  2.602085e-18+4.770490e-18i
[10,]  2.775558e-17-3.209238e-17i -8.673617e-19-1.040834e-17i -8.673617e-19-1.301043e-17i
 [ достигнута getOption("max.print") -- пропущено 86 строк ]
plot(1:L, res_comp_wise[[1]][, 2])
Предупреждение в xy.coords(x, y, xlabel, ylabel, log) :
  мнимые части убраны при преобразовании

avr <- averaging(res_comp_wise)

for (i in 1:dim(res$t_series)[2]){
  plot(x, avr[i, ])
}
Ошибка в 1:dim(res$t_series)[2] :аргумент нулевой длины

CiSSA через Фурье

n <- 96*2-1
x <- 0:(n-1)
L <- 96
y <- sin(2*pi/12 * x)

X <- hankel(y, L)

Ft <- dftmtx(L) / sqrt(L)
Ft_inv <- t(Conj(Ft))

component_wise_mult <- function(index){
  Ft %*% t(sweep(Ft_inv, 1, X[, index], '*'))
}


averaging <- function(res_comp_wise_mult){
  K <- dim(X)[2]
  counters <- rep(0, n)
  res <- matrix(0, nrow = n, ncol = L)
  for (i in 1:K){
    res[i:(i+L-1), ] <- res[i:(i+L-1), ] + res_comp_wise_mult[[i]]
    counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
  }
  for (i in 1:n){
    res[i, ] <- res[i, ] / counters[i]
  }
  res
}


res_comp_wise <- lapply(1:L, component_wise_mult)
print(res_comp_wise[[1]])
      [,1]                        [,2]                        [,3]                        [,4]                        [,5]
 [1,] 0+0i  1.387779e-17-4.374756e-17i  2.255141e-17+1.778092e-17i -1.561251e-17+1.994932e-17i -5.377643e-17-6.505213e-18i
 [2,] 0+0i  5.000000e-01+0.000000e+00i  6.938894e-18-6.776264e-17i  1.561251e-17-6.418477e-17i -6.938894e-18+1.170938e-17i
 [3,] 0+0i  1.040834e-17-2.569559e-17i  8.660254e-01+0.000000e+00i -3.989864e-17-3.165870e-17i -5.898060e-17-3.361027e-17i
 [4,] 0+0i -2.949030e-17+2.634611e-17i  6.938894e-17-2.667137e-17i  1.000000e+00-0.000000e+00i  2.949030e-17-1.994932e-17i
 [5,] 0+0i  5.204170e-18-4.987330e-18i -1.734723e-17-2.602085e-18i  2.949030e-17+0.000000e+00i  8.660254e-01-0.000000e+00i
 [6,] 0+0i  5.204170e-18+6.505213e-18i  0.000000e+00-3.187554e-17i -5.377643e-17-1.431147e-17i -3.469447e-18+1.144917e-16i
 [7,] 0+0i  3.469447e-18-4.770490e-18i -2.775558e-17-4.336809e-19i -3.469447e-18-6.071532e-18i  2.255141e-17-2.168404e-18i
 [8,] 0+0i -1.734723e-18+1.647987e-17i  0.000000e+00-8.673617e-18i -1.144917e-16+1.149254e-16i -6.938894e-18-1.214306e-17i
 [9,] 0+0i  0.000000e+00+6.071532e-18i  1.734723e-18-5.637851e-18i  0.000000e+00+1.734723e-18i  5.204170e-17-1.301043e-17i
[10,] 0+0i -8.673617e-19-4.336809e-19i -5.204170e-18-5.204170e-18i  2.949030e-17+5.204170e-18i  1.040834e-17+3.469447e-18i
                             [,6]                        [,7]                        [,8]                        [,9]
 [1,]  0.000000e+00+4.987330e-18i  5.777790e-34-3.274081e-33i -3.469447e-18+7.806256e-18i -2.602085e-18+0.000000e+00i
 [2,]  2.515349e-17-3.469447e-18i  3.851860e-34+1.637040e-33i  1.734723e-18+6.505213e-18i -1.040834e-17-7.806256e-18i
 [3,] -1.734723e-18+8.673617e-19i  1.213336e-32-9.629650e-35i -2.602085e-18+6.938894e-18i -1.040834e-17-2.645453e-17i
 [4,]  1.387779e-17-6.722053e-18i  0.000000e+00-2.311116e-33i -6.765422e-17+1.734723e-18i  8.673617e-18+1.734723e-18i
 [5,] -8.673617e-19+9.540979e-18i -3.851860e-34-4.188898e-33i  6.938894e-18+5.421011e-18i  0.000000e+00-7.372575e-18i
 [6,]  5.000000e-01-0.000000e+00i -9.629650e-34-2.888895e-33i -8.673617e-19-8.023096e-18i  1.214306e-17-1.691355e-17i
 [7,] -1.040834e-17-6.071532e-18i  1.224606e-16+0.000000e+00i  6.938894e-18+5.421011e-18i -1.040834e-17-8.239937e-18i
 [8,] -8.673617e-19-2.406929e-17i -7.896313e-33+9.629650e-34i -5.000000e-01-0.000000e+00i -1.214306e-17+5.811324e-17i
 [9,] -8.673617e-19+1.387779e-17i  9.629650e-34-5.488900e-33i -8.673617e-19+2.775558e-17i -8.660254e-01-0.000000e+00i
[10,] -8.673617e-19+2.385245e-18i -3.274081e-33-1.829633e-33i -2.255141e-17-4.987330e-18i -3.469447e-18+2.753874e-17i
                            [,10]                       [,11]                       [,12]                       [,13]
 [1,] -8.673617e-18+1.821460e-17i -1.734723e-18-8.673617e-19i -8.673617e-19+1.734723e-18i  0.000000e+00-3.851860e-34i
 [2,]  5.724587e-17+5.204170e-18i  7.806256e-18-1.040834e-17i  0.000000e+00+1.257675e-17i -3.851860e-34+2.311116e-33i
 [3,]  1.734723e-18-6.071532e-18i  5.030698e-17-2.775558e-17i  1.734723e-18+4.336809e-18i -3.466674e-33-3.274081e-33i
 [4,] -3.122502e-17+2.862294e-17i  6.938894e-18-6.071532e-18i  5.551115e-17+3.903128e-18i -7.703720e-34-4.237046e-33i
 [5,] -2.255141e-17+2.255141e-17i  1.387779e-17-2.211772e-17i  8.673617e-19-3.469447e-18i  2.465190e-32+9.629650e-34i
 [6,] -8.673617e-18+1.734723e-17i  2.255141e-17-3.035766e-18i  2.602085e-18+1.474515e-17i -1.540744e-33-1.155558e-33i
 [7,] -6.938894e-18+3.035766e-18i -1.144917e-16+7.372575e-18i -2.602085e-18+2.168404e-18i -5.007418e-33+1.925930e-34i
 [8,] -2.949030e-17-6.808790e-17i -8.673617e-18-2.558717e-17i -4.336809e-17+2.537033e-17i  3.466674e-33+1.540744e-33i
 [9,]  1.734723e-18+7.719519e-17i  3.469447e-18-1.257675e-17i -2.602085e-18-2.081668e-17i  1.540744e-33+2.503709e-33i
[10,] -1.000000e+00-0.000000e+00i  2.081668e-17-9.887924e-17i  1.734723e-17-9.540979e-18i  5.007418e-33+3.851860e-33i
                            [,14]                       [,15]                       [,16]                       [,17]
 [1,]  4.770490e-18-1.734723e-18i  6.938894e-18-1.734723e-18i  1.734723e-18-8.673617e-18i  1.214306e-17+3.469447e-18i
 [2,]  1.647987e-17-1.604619e-17i  2.602085e-18+6.071532e-18i -1.734723e-18+3.469447e-18i  7.806256e-18-6.071532e-18i
 [3,]  5.204170e-18+2.602085e-18i -1.561251e-17+2.428613e-17i  2.602085e-18-6.938894e-18i  0.000000e+00+9.540979e-18i
 [4,]  0.000000e+00-4.770490e-18i -1.734723e-18-1.214306e-17i  8.673617e-19-2.602085e-17i  8.673617e-19+1.734723e-18i
 [5,]  3.469447e-18-9.540979e-18i  1.734723e-18-1.734723e-18i  6.938894e-18+1.214306e-17i -4.423545e-17-3.469447e-18i
 [6,] -8.239937e-17+0.000000e+00i  1.734723e-18-2.602085e-18i -1.734723e-18-2.602085e-18i  2.602085e-18+9.540979e-18i
 [7,] -2.602085e-18-1.387779e-17i -1.422473e-16+9.540979e-18i  0.000000e+00+6.071532e-18i  1.561251e-17-1.040834e-17i
 [8,]  1.734723e-18-1.387779e-17i  6.938894e-18-1.647987e-17i -1.994932e-16+1.734723e-18i  1.734723e-18+1.647987e-17i
 [9,] -5.204170e-18-1.301043e-18i  3.469447e-18+2.732189e-17i -3.469447e-18+1.561251e-17i  5.204170e-17+0.000000e+00i
[10,]  2.688821e-17-2.818926e-18i  0.000000e+00+5.637851e-18i -2.602085e-17-7.979728e-17i  1.734723e-18-2.602085e-17i
                            [,18]                       [,19]                       [,20]                       [,21]
 [1,]  1.301043e-18+3.469447e-18i  2.118523e-33+0.000000e+00i  1.734723e-18+4.336809e-18i  1.734723e-18+1.561251e-17i
 [2,]  8.239937e-18-1.734723e-18i -5.777790e-34-1.925930e-33i  4.336809e-19+8.673617e-19i -4.336809e-18-3.469447e-18i
 [3,]  0.000000e+00-8.673617e-19i  1.117039e-32+7.703720e-34i  2.168404e-18+8.673617e-19i -8.673617e-19+0.000000e+00i
 [4,] -2.168404e-18+8.673617e-19i  1.925930e-33+0.000000e+00i -1.257675e-17-1.734723e-18i  5.204170e-18+1.040834e-17i
 [5,] -1.301043e-18+0.000000e+00i  2.311116e-33+7.703720e-34i  4.336809e-18+1.734723e-18i -1.301043e-17-2.862294e-17i
 [6,] -1.257675e-17-1.647987e-17i -3.851860e-34+4.622232e-33i  4.336809e-19+0.000000e+00i  1.734723e-18-2.602085e-18i
 [7,]  0.000000e+00+1.734723e-18i -2.465190e-32-3.851860e-34i  4.336809e-19-8.673617e-19i  1.734723e-18-2.602085e-18i
 [8,]  6.938894e-18+1.734723e-18i -1.540744e-33+3.851860e-34i -4.293441e-17+5.377643e-17i -8.673617e-19-6.071532e-18i
 [9,] -8.673617e-19+3.469447e-18i  1.540744e-33-3.851860e-34i  2.602085e-18-3.035766e-18i -5.377643e-17+5.204170e-17i
[10,] -1.387779e-17+1.301043e-17i -7.703720e-34-6.933348e-33i  8.673617e-19+1.561251e-17i -2.602085e-18-5.204170e-18i
                            [,22]                       [,23]                       [,24]                       [,25]
 [1,]  4.336809e-19+1.734723e-18i  6.071532e-18-5.204170e-18i -1.355253e-18-8.673617e-19i  0.000000e+00+0.000000e+00i
 [2,]  1.214306e-17+1.387779e-17i -2.602085e-18+0.000000e+00i -2.602085e-18-8.673617e-19i -4.814825e-35+0.000000e+00i
 [3,]  4.336809e-18-1.734723e-18i -4.163336e-17+0.000000e+00i  8.673617e-19-8.673617e-19i -3.274081e-33+0.000000e+00i
 [4,] -1.734723e-18-1.387779e-17i  1.734723e-18-1.734723e-18i -1.994932e-17+0.000000e+00i  1.925930e-34+2.311116e-33i
 [5,]  6.938894e-18+6.938894e-18i -4.336809e-19+6.938894e-18i  2.168404e-18+1.734723e-18i  0.000000e+00-2.311116e-33i
 [6,] -5.464379e-17-5.204170e-17i  0.000000e+00+6.938894e-18i  2.602085e-18-2.602085e-18i -2.503709e-33+0.000000e+00i
 [7,]  3.469447e-18-6.938894e-18i -4.336809e-17-5.724587e-17i  1.734723e-18-8.673617e-19i  3.851860e-34-2.311116e-33i
 [8,] -1.734723e-18+2.255141e-17i -2.602085e-18-1.214306e-17i -4.119968e-17-1.127570e-17i -3.851860e-34-3.081488e-33i
 [9,] -3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i  8.673617e-19-2.602085e-18i  0.000000e+00-7.703720e-34i
[10,] -8.847090e-17+5.464379e-17i -1.734723e-18-1.387779e-17i -4.336809e-19+1.734723e-18i -1.155558e-33+0.000000e+00i
                            [,26]                       [,27]                       [,28]                       [,29]
 [1,] -2.710505e-19+0.000000e+00i  2.385245e-18+5.204170e-18i -1.734723e-18-3.469447e-18i  1.604619e-17+1.387779e-17i
 [2,]  1.382358e-17-1.301043e-17i  6.071532e-18+6.938894e-18i  0.000000e+00-6.938894e-18i -4.336809e-19+1.734723e-18i
 [3,]  5.421011e-20-8.673617e-19i  1.431147e-17+1.734723e-18i -8.673617e-19-3.469447e-18i -6.505213e-19+0.000000e+00i
 [4,]  3.252607e-18-8.673617e-19i -1.517883e-18+0.000000e+00i -8.673617e-19+1.734723e-18i  8.673617e-19-1.734723e-18i
 [5,] -8.673617e-19+2.602085e-18i  1.084202e-18+0.000000e+00i  2.168404e-18-1.734723e-18i -2.775558e-17-2.949030e-17i
 [6,]  6.938894e-18+0.000000e+00i -4.336809e-19+1.734723e-18i -5.637851e-18+0.000000e+00i -1.301043e-18-1.734723e-18i
 [7,]  4.553649e-18+3.469447e-18i  2.862294e-17-3.989864e-17i  2.602085e-18-1.734723e-18i  1.734723e-18+0.000000e+00i
 [8,]  8.673617e-19+0.000000e+00i  2.602085e-18+1.734723e-18i  5.421011e-17+1.387779e-17i  3.469447e-18+3.469447e-18i
 [9,]  4.336809e-19+1.734723e-18i -1.301043e-18+1.734723e-18i -3.469447e-18-1.734723e-18i  4.336809e-19+1.214306e-17i
[10,]  4.336809e-19-2.602085e-18i -1.734723e-18-3.469447e-18i  8.673617e-19+5.204170e-18i  6.505213e-18+5.204170e-18i
                            [,30]                       [,31]                       [,32]                       [,33]
 [1,]  6.505213e-19+8.673617e-19i  0.000000e+00+0.000000e+00i  1.301043e-18-8.673617e-19i -2.688821e-17+0.000000e+00i
 [2,]  7.155734e-18+8.673617e-19i  4.622232e-33-3.081488e-33i -4.336809e-19-8.673617e-19i -3.469447e-18+1.734723e-18i
 [3,]  8.673617e-19+8.673617e-19i -2.619265e-32+0.000000e+00i  1.301043e-18+2.602085e-18i -6.938894e-18-1.734723e-18i
 [4,]  1.084202e-18+0.000000e+00i  4.622232e-33+0.000000e+00i -6.505213e-19+7.806256e-18i  1.301043e-18+3.469447e-18i
 [5,] -1.084202e-18+0.000000e+00i -2.696302e-32-1.540744e-32i  8.673617e-19+3.469447e-18i -1.474515e-17+0.000000e+00i
 [6,] -5.854692e-18-2.168404e-17i -1.540744e-33+6.162976e-33i -2.168404e-19+0.000000e+00i -1.301043e-18+1.734723e-18i
 [7,] -1.517883e-18-1.734723e-18i  2.187856e-31-4.930381e-32i -6.505213e-19-8.673617e-19i  5.637851e-18-1.734723e-18i
 [8,] -3.035766e-18+3.469447e-18i -6.162976e-33+0.000000e+00i -6.505213e-18+2.081668e-17i -3.469447e-18-3.469447e-18i
 [9,]  1.517883e-18+2.602085e-18i -2.465190e-32+3.081488e-33i  0.000000e+00+8.673617e-19i -6.722053e-17-2.775558e-17i
[10,] -6.505213e-19-6.071532e-18i -1.386670e-32-1.848893e-32i  2.168404e-19-3.469447e-18i -1.734723e-18-3.469447e-18i
                            [,34]                       [,35]                       [,36]                       [,37]
 [1,] -1.734723e-18+5.204170e-18i  4.336809e-18+0.000000e+00i  8.673617e-19-8.673617e-19i  2.311116e-33+0.000000e+00i
 [2,]  0.000000e+00+1.561251e-17i -8.673617e-19-8.673617e-19i  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i
 [3,]  6.071532e-18+1.734723e-18i -1.474515e-17-3.989864e-17i -8.673617e-19-8.673617e-19i -7.703720e-34+0.000000e+00i
 [4,]  1.734723e-18+0.000000e+00i  1.734723e-18+0.000000e+00i  1.431147e-17+0.000000e+00i  1.540744e-33+0.000000e+00i
 [5,] -8.673617e-19+3.469447e-18i -1.734723e-18-1.734723e-18i -4.336809e-19-8.673617e-19i -2.465190e-32-1.232595e-32i
 [6,]  2.515349e-17+2.602085e-17i -8.673617e-19+0.000000e+00i -2.602085e-18+0.000000e+00i -1.155558e-33+7.703720e-34i
 [7,]  7.372575e-18+3.469447e-18i -8.673617e-19+1.387779e-17i  2.818926e-18+8.673617e-19i -5.777790e-33+0.000000e+00i
 [8,]  1.301043e-18+6.938894e-18i  3.469447e-18+3.469447e-18i -2.168404e-17+6.938894e-18i -7.703720e-34+0.000000e+00i
 [9,]  8.673617e-19+3.469447e-18i  0.000000e+00-1.734723e-18i -1.734723e-18+8.673617e-19i  3.851860e-34+0.000000e+00i
[10,] -4.336809e-17-4.336809e-17i  5.204170e-18+6.938894e-18i  3.035766e-18+0.000000e+00i -1.155558e-33-3.081488e-33i
                            [,38]                       [,39]                       [,40]                       [,41]
 [1,] -8.673617e-19+0.000000e+00i -6.938894e-18-8.673617e-19i -1.734723e-18+1.734723e-18i  6.938894e-18-6.071532e-18i
 [2,]  1.431147e-17-3.903128e-18i  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i
 [3,]  0.000000e+00+8.673617e-19i -2.688821e-17+0.000000e+00i -1.734723e-18+0.000000e+00i  4.336809e-18+3.469447e-18i
 [4,]  2.602085e-18+0.000000e+00i -4.336809e-18+0.000000e+00i  1.301043e-17-2.428613e-17i -2.602085e-18-2.602085e-18i
 [5,]  8.673617e-19+8.673617e-19i -1.734723e-18+0.000000e+00i  1.734723e-18+1.734723e-18i -2.862294e-17+2.862294e-17i
 [6,]  4.336809e-19+2.688821e-17i -8.673617e-19-1.734723e-18i  2.602085e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.301043e-18-2.602085e-18i  2.688821e-17+2.862294e-17i  2.602085e-18+1.734723e-18i -2.602085e-18+0.000000e+00i
 [8,] -4.770490e-18+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.163336e-17i -1.734723e-18-8.673617e-19i
 [9,] -1.517883e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+2.775558e-17i
[10,]  2.168404e-19-6.938894e-18i  4.336809e-19+1.734723e-18i -6.071532e-18+0.000000e+00i  3.469447e-18+1.734723e-18i
                            [,42]                       [,43]                       [,44]                       [,45]
 [1,]  0.000000e+00+4.336809e-19i  0.000000e+00+3.851860e-34i  8.673617e-19+0.000000e+00i  1.561251e-17+4.336809e-19i
 [2,]  1.387779e-17+1.040834e-17i -1.540744e-33+0.000000e+00i -3.469447e-18+0.000000e+00i  0.000000e+00+1.301043e-18i
 [3,] -8.673617e-19+0.000000e+00i  0.000000e+00+3.081488e-33i  1.734723e-18+0.000000e+00i -1.734723e-18-4.336809e-19i
 [4,]  0.000000e+00+0.000000e+00i  3.081488e-33+7.703720e-34i -1.474515e-17-1.040834e-17i -1.734723e-18-8.673617e-19i
 [5,]  0.000000e+00+4.336809e-19i  0.000000e+00+7.703720e-34i  0.000000e+00+0.000000e+00i -1.301043e-17+1.474515e-17i
 [6,] -1.344411e-17+3.903128e-18i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i -1.309632e-32+1.232595e-32i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+0.000000e+00i  0.000000e+00-1.540744e-33i  4.336809e-19+4.163336e-17i -1.734723e-18+8.673617e-19i
 [9,] -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i  1.301043e-18+0.000000e+00i -1.474515e-17+1.387779e-17i
[10,]  2.038300e-17-6.938894e-18i -3.851860e-33-3.081488e-33i -8.673617e-19+0.000000e+00i -8.673617e-19+0.000000e+00i
                            [,46]                       [,47]                       [,48]                       [,49]
 [1,]  1.734723e-18+4.336809e-19i -1.734723e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,] -2.775558e-17+2.081668e-17i  1.734723e-18+1.301043e-18i -8.673617e-19-2.168404e-19i  1.540744e-33-2.888895e-34i
 [3,]  3.469447e-18+0.000000e+00i -1.387779e-17-3.122502e-17i -8.673617e-19+2.168404e-19i -1.540744e-33+3.851860e-34i
 [4,]  1.734723e-18+3.469447e-18i -1.734723e-18+0.000000e+00i -6.938894e-18+4.119968e-18i  0.000000e+00-3.851860e-34i
 [5,] -1.734723e-18+8.673617e-19i -1.734723e-18+0.000000e+00i -1.734723e-18+0.000000e+00i  1.540744e-33+0.000000e+00i
 [6,] -1.387779e-17+4.857226e-17i -5.204170e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  0.000000e+00-3.851860e-34i
 [7,]  1.734723e-18+8.673617e-19i -1.214306e-17+6.938894e-18i -8.673617e-19-4.336809e-19i -1.540744e-33+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  1.734723e-18+0.000000e+00i -8.673617e-19+3.469447e-18i  0.000000e+00+1.540744e-33i
 [9,]  0.000000e+00+0.000000e+00i -8.673617e-19+0.000000e+00i  0.000000e+00+4.336809e-19i  1.232595e-32+1.309632e-32i
[10,]  1.214306e-17+3.122502e-17i -8.673617e-19-8.673617e-19i  8.673617e-19+0.000000e+00i  4.622232e-33+7.703720e-34i
                            [,50]                       [,51]                       [,52]                       [,53]
 [1,]  0.000000e+00+1.084202e-19i  0.000000e+00+6.505213e-19i  0.000000e+00+8.673617e-19i -1.214306e-17-1.691355e-17i
 [2,]  1.040834e-17-1.517883e-18i -3.469447e-18-1.084202e-18i  1.734723e-18+0.000000e+00i  1.734723e-18+6.505213e-19i
 [3,]  0.000000e+00-3.252607e-19i  6.938894e-18-3.800083e-18i  3.469447e-18+4.336809e-19i -1.734723e-18+0.000000e+00i
 [4,]  0.000000e+00-3.252607e-19i -5.204170e-18+0.000000e+00i  1.387779e-17-6.938894e-18i  0.000000e+00-4.336809e-19i
 [5,] -8.673617e-19-2.168404e-19i  1.734723e-18-2.168404e-19i  3.469447e-18+0.000000e+00i  2.775558e-17+3.642919e-17i
 [6,]  6.938894e-18-6.938894e-18i  0.000000e+00+2.168404e-19i  5.204170e-18-4.336809e-19i  1.734723e-18+0.000000e+00i
 [7,]  8.673617e-19+0.000000e+00i  1.387779e-17+6.938894e-18i  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i
 [8,]  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  1.734723e-18-1.517883e-17i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00+4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+0.000000e+00i  6.938894e-18+3.035766e-18i
[10,]  6.071532e-18-8.673617e-18i -1.734723e-18-8.673617e-19i -5.204170e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
                            [,54]                       [,55]                       [,56]                       [,57]
 [1,] -8.673617e-19-4.336809e-19i -1.848893e-32-3.081488e-33i  0.000000e+00+4.336809e-19i  0.000000e+00-3.469447e-18i
 [2,] -8.673617e-19+7.372575e-18i  0.000000e+00+0.000000e+00i  3.469447e-18+0.000000e+00i  1.734723e-18-8.673617e-19i
 [3,]  8.673617e-19-4.336809e-19i  6.162976e-33-7.395571e-32i  1.734723e-18-4.336809e-19i -1.734723e-18+8.673617e-19i
 [4,]  0.000000e+00+0.000000e+00i -1.232595e-32-4.622232e-33i -1.994932e-17+3.686287e-18i  0.000000e+00+0.000000e+00i
 [5,]  1.734723e-18-4.336809e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+2.168404e-19i -1.734723e-18-2.775558e-17i
 [6,] -2.775558e-17-4.553649e-18i -1.232595e-32+0.000000e+00i  0.000000e+00+4.336809e-19i  3.469447e-18+0.000000e+00i
 [7,]  1.734723e-18+2.168404e-19i -1.725633e-31-2.762130e-32i -8.673617e-19-4.336809e-19i -1.734723e-18-4.336809e-19i
 [8,]  2.602085e-18+2.168404e-19i  0.000000e+00+0.000000e+00i  0.000000e+00+4.119968e-18i  1.734723e-18+4.336809e-19i
 [9,] -8.673617e-19+4.336809e-19i  6.162976e-33+0.000000e+00i  1.734723e-18+0.000000e+00i -6.938894e-17+6.193259e-17i
[10,]  6.938894e-18+7.589415e-18i  0.000000e+00+6.162976e-33i  0.000000e+00+2.168404e-19i  1.734723e-18-4.336809e-19i
                            [,58]                       [,59]                       [,60]                       [,61]
 [1,] -1.734723e-18+8.673617e-19i  1.734723e-18+8.673617e-19i  0.000000e+00-4.336809e-19i  6.162976e-33+0.000000e+00i
 [2,]  1.734723e-18-2.775558e-17i  1.734723e-18-8.673617e-19i  0.000000e+00+4.336809e-19i  2.465190e-32-6.162976e-33i
 [3,]  0.000000e+00+8.673617e-19i  1.734723e-18+0.000000e+00i  0.000000e+00-4.336809e-19i  0.000000e+00+1.848893e-32i
 [4,] -6.938894e-18+8.673617e-19i  0.000000e+00-8.673617e-19i -7.806256e-18+3.469447e-18i -1.232595e-32+6.162976e-33i
 [5,] -1.734723e-18-8.673617e-19i -1.734723e-18+0.000000e+00i  0.000000e+00+0.000000e+00i -9.860761e-32+9.860761e-32i
 [6,] -2.775558e-17+1.301043e-17i -1.734723e-18-4.336809e-19i  2.602085e-18+0.000000e+00i  6.162976e-33+0.000000e+00i
 [7,]  1.734723e-18+4.336809e-19i  0.000000e+00-3.035766e-18i  0.000000e+00-2.168404e-19i -6.162976e-33+0.000000e+00i
 [8,]  0.000000e+00-4.336809e-19i -3.469447e-18-4.336809e-19i -1.387779e-17+1.387779e-17i  0.000000e+00-3.081488e-33i
 [9,] -1.734723e-18+4.336809e-19i  1.734723e-18-4.336809e-19i  8.673617e-19-4.336809e-19i  0.000000e+00+3.081488e-33i
[10,] -3.469447e-17+6.707597e-17i -1.734723e-18+2.168404e-19i -8.673617e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
                            [,62]                       [,63]                       [,64]                       [,65]
 [1,]  0.000000e+00-8.673617e-19i  7.806256e-18-8.673617e-19i  1.734723e-18-1.734723e-18i  1.387779e-17-1.387779e-17i
 [2,]  7.806256e-18-3.469447e-18i -1.734723e-18-1.734723e-18i -1.734723e-18+1.734723e-18i  8.673617e-19+0.000000e+00i
 [3,]  1.734723e-18-4.336809e-19i -1.387779e-17-2.775558e-17i -4.336809e-18+1.734723e-18i -7.806256e-18+8.673617e-19i
 [4,]  0.000000e+00+4.336809e-19i -1.734723e-18+0.000000e+00i  2.602085e-18-6.938894e-18i  0.000000e+00+0.000000e+00i
 [5,] -8.673617e-19+0.000000e+00i  8.673617e-19+0.000000e+00i  1.734723e-18+0.000000e+00i -1.734723e-18+6.938894e-18i
 [6,]  2.081668e-17-1.040834e-17i  0.000000e+00+0.000000e+00i  0.000000e+00+8.673617e-19i -8.673617e-19+0.000000e+00i
 [7,]  8.673617e-19+4.336809e-19i  1.214306e-17-2.081668e-17i  1.734723e-18-8.673617e-19i  7.806256e-18-8.673617e-19i
 [8,]  0.000000e+00+0.000000e+00i -3.469447e-18-8.673617e-19i  1.561251e-17+6.938894e-18i -1.734723e-18+0.000000e+00i
 [9,]  0.000000e+00-6.505213e-19i  0.000000e+00+4.336809e-19i  1.734723e-18-8.673617e-19i -1.734723e-18+6.071532e-18i
[10,]  6.938894e-18+6.938894e-18i  0.000000e+00-8.673617e-19i  1.734723e-18+0.000000e+00i  3.469447e-18+8.673617e-19i
                            [,66]                       [,67]                       [,68]                       [,69]
 [1,] -4.336809e-19-8.673617e-19i  6.162976e-33+1.848893e-32i  6.505213e-19+0.000000e+00i  4.336809e-19-1.214306e-17i
 [2,]  4.336809e-19-6.071532e-18i -9.244464e-33+1.232595e-32i  4.770490e-18-8.673617e-19i  8.673617e-19+0.000000e+00i
 [3,]  1.301043e-18-1.734723e-18i -9.860761e-32+9.860761e-32i  1.301043e-18+0.000000e+00i -4.336809e-19-1.734723e-18i
 [4,] -3.469447e-18+3.469447e-18i  1.232595e-32-3.081488e-32i -1.951564e-17+6.071532e-18i  3.469447e-18-3.469447e-18i
 [5,] -1.734723e-18+0.000000e+00i  2.465190e-32-6.162976e-33i  3.903128e-18-2.602085e-18i  2.775558e-17-1.387779e-17i
 [6,] -5.637851e-18+6.938894e-18i  6.162976e-33-1.232595e-32i  3.035766e-18+0.000000e+00i  0.000000e+00-8.673617e-19i
 [7,]  1.734723e-18-4.336809e-19i -4.930381e-32+4.314083e-32i -4.336809e-19-8.673617e-19i  4.336809e-18+0.000000e+00i
 [8,] -8.673617e-19+0.000000e+00i  0.000000e+00-1.232595e-32i  1.301043e-18+6.938894e-18i  0.000000e+00+8.673617e-19i
 [9,]  0.000000e+00+0.000000e+00i  6.162976e-33-6.162976e-33i -8.673617e-19+0.000000e+00i  1.561251e-17+0.000000e+00i
[10,]  7.806256e-18+1.734723e-17i -1.232595e-32+0.000000e+00i  3.469447e-18-4.336809e-19i  1.734723e-18-8.673617e-19i
                            [,70]                       [,71]                       [,72]                       [,73]
 [1,]  2.168404e-18+3.469447e-18i -6.938894e-18+1.734723e-18i  3.252607e-19+0.000000e+00i  0.000000e+00+0.000000e+00i
 [2,]  8.673617e-19-2.775558e-17i -1.301043e-18+3.469447e-18i -2.168404e-19+0.000000e+00i -6.740755e-33+3.081488e-33i
 [3,]  2.602085e-18+3.469447e-18i -1.214306e-17-6.938894e-18i -4.336809e-19-8.673617e-19i -3.851860e-34+3.081488e-33i
 [4,]  1.734723e-18-5.204170e-18i -3.903128e-18+0.000000e+00i -5.637851e-18-6.938894e-18i  2.696302e-33+0.000000e+00i
 [5,] -1.734723e-18-1.734723e-18i  6.071532e-18-1.734723e-18i -4.336809e-19+8.673617e-19i -2.157042e-32+0.000000e+00i
 [6,]  1.474515e-17-2.775558e-17i  0.000000e+00+0.000000e+00i  4.336809e-19-8.673617e-19i -6.933348e-33+3.081488e-33i
 [7,]  6.938894e-18-5.204170e-18i -4.163336e-17+1.387779e-17i -4.336809e-19-8.673617e-19i  8.474092e-33+0.000000e+00i
 [8,] -1.734723e-18+0.000000e+00i  0.000000e+00-8.673617e-19i  1.387779e-17-1.301043e-17i  3.081488e-33+0.000000e+00i
 [9,]  3.469447e-18-3.469447e-18i  0.000000e+00+0.000000e+00i -1.734723e-18+8.673617e-19i -2.465190e-32+1.232595e-32i
[10,]  0.000000e+00+1.040834e-17i -1.734723e-18+8.673617e-19i  0.000000e+00+0.000000e+00i  1.540744e-33+0.000000e+00i
                            [,74]                       [,75]                       [,76]                       [,77]
 [1,]  1.084202e-18-8.673617e-19i -4.770490e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -1.344411e-17-2.775558e-17i
 [2,] -6.830474e-18+0.000000e+00i -1.192622e-18+1.734723e-18i -1.734723e-18-6.938894e-18i -3.035766e-18+1.734723e-18i
 [3,] -7.589415e-19-8.673617e-19i  4.141652e-17+1.387779e-17i  8.673617e-19-3.469447e-18i  7.372575e-18-1.734723e-18i
 [4,]  2.168404e-19+3.469447e-18i  2.168404e-18-1.734723e-18i  2.862294e-17+1.734723e-18i -2.168404e-19+0.000000e+00i
 [5,]  8.673617e-19-8.673617e-19i  4.770490e-18-1.734723e-18i -5.637851e-18+1.734723e-18i  4.293441e-17+1.734723e-18i
 [6,]  1.973248e-17+6.071532e-18i  6.505213e-19+0.000000e+00i -6.505213e-18-1.734723e-18i -1.734723e-18+0.000000e+00i
 [7,]  2.602085e-18-2.602085e-18i  1.301043e-18-1.734723e-18i -2.602085e-18+0.000000e+00i -2.168404e-18-6.938894e-18i
 [8,] -8.673617e-19+0.000000e+00i  4.770490e-18-3.469447e-18i -1.431147e-17-1.734723e-18i -1.301043e-18+1.734723e-18i
 [9,] -1.734723e-18+1.734723e-18i  4.336809e-18+0.000000e+00i  0.000000e+00+3.469447e-18i  1.387779e-17-1.387779e-17i
[10,] -6.505213e-18+8.673617e-19i -8.673617e-19-1.734723e-18i  8.673617e-19+1.734723e-18i  1.734723e-18-1.734723e-18i
                            [,78]                       [,79]                       [,80]                       [,81]
 [1,] -1.517883e-18+8.673617e-19i  4.622232e-32+0.000000e+00i -2.602085e-18+1.734723e-18i  8.673617e-19+2.602085e-18i
 [2,]  1.387779e-17-8.673617e-19i  5.238529e-32-4.930381e-32i  2.602085e-18+1.734723e-18i -2.602085e-18-3.469447e-18i
 [3,]  4.336809e-19+2.602085e-18i  3.081488e-33+1.047706e-31i -8.673617e-19+3.469447e-18i -5.204170e-18-1.734723e-18i
 [4,]  1.192622e-18+0.000000e+00i -3.389637e-32+2.465190e-32i -4.336809e-19+2.168404e-17i  6.071532e-18-3.469447e-18i
 [5,]  4.336809e-19+0.000000e+00i -1.232595e-32+1.232595e-32i -2.168404e-19+3.469447e-18i -1.387779e-17+1.387779e-17i
 [6,] -6.288373e-18+1.474515e-17i  1.232595e-32-2.465190e-32i -1.084202e-18+8.673617e-19i  3.903128e-18-3.469447e-18i
 [7,] -2.602085e-18+1.734723e-18i  1.910523e-31-3.451266e-31i -2.818926e-18+1.734723e-18i  0.000000e+00+0.000000e+00i
 [8,]  4.336809e-19+8.673617e-19i  1.540744e-32+0.000000e+00i -4.336809e-19+4.857226e-17i -1.734723e-18+1.734723e-18i
 [9,]  1.951564e-18-1.734723e-18i -4.622232e-32+6.162976e-33i -8.673617e-19+8.673617e-19i  4.076600e-17+1.127570e-16i
[10,]  1.387779e-17+6.071532e-18i -3.081488e-33-1.232595e-32i -4.336809e-19+2.602085e-18i -8.673617e-19+0.000000e+00i
                            [,82]                       [,83]                       [,84]                       [,85]
 [1,]  3.469447e-18+5.204170e-18i  8.673617e-19+8.673617e-19i -8.673617e-19+0.000000e+00i  1.540744e-33+0.000000e+00i
 [2,]  1.908196e-17+2.255141e-17i -1.734723e-18+1.734723e-18i -2.168404e-18-8.673617e-19i  3.081488e-33+1.078521e-32i
 [3,] -2.602085e-18+3.469447e-18i -1.734723e-18+2.255141e-17i -1.734723e-18+8.673617e-19i -3.081488e-33+5.238529e-32i
 [4,]  1.734723e-18-3.469447e-18i  7.806256e-18+1.734723e-18i  1.734723e-18-1.127570e-17i  4.622232e-33+2.157042e-32i
 [5,]  8.673617e-19-1.734723e-18i  5.204170e-18+0.000000e+00i  1.734723e-18+8.673617e-19i  1.032298e-31-6.162976e-33i
 [6,] -1.301043e-17+2.775558e-17i -2.602085e-18-1.734723e-18i  0.000000e+00-6.938894e-18i  0.000000e+00-3.081488e-33i
 [7,] -4.336809e-19+3.469447e-18i -1.387779e-17+1.734723e-18i  2.168404e-19-2.602085e-18i -9.244464e-33+0.000000e+00i
 [8,]  5.637851e-18+0.000000e+00i -2.602085e-18+0.000000e+00i -7.155734e-18+6.938894e-18i -2.311116e-33-3.081488e-33i
 [9,]  2.602085e-18-1.734723e-18i  0.000000e+00-1.734723e-18i  1.734723e-18+0.000000e+00i -3.851860e-33+0.000000e+00i
[10,]  2.949030e-17+6.765422e-17i  8.673617e-19-3.469447e-18i  4.336809e-19-8.673617e-19i  1.540744e-33-9.244464e-33i
                            [,86]                       [,87]                       [,88]                       [,89]
 [1,] -1.734723e-18-2.602085e-18i  2.602085e-18+8.673617e-19i -1.734723e-18-1.561251e-17i  5.030698e-17+5.290907e-17i
 [2,]  1.431147e-17+1.474515e-17i -8.673617e-19+5.204170e-18i  0.000000e+00+1.040834e-17i  4.336809e-18+8.673617e-19i
 [3,] -8.673617e-19-1.734723e-18i -1.387779e-17-2.515349e-17i  1.734723e-18+3.469447e-18i  3.469447e-18-1.214306e-17i
 [4,] -1.344411e-17-1.734723e-18i  5.204170e-18-6.071532e-18i  2.168404e-17+2.688821e-17i  2.602085e-18+8.673617e-18i
 [5,]  3.035766e-18+0.000000e+00i -1.734723e-18-1.734723e-18i -5.204170e-18-1.734723e-18i  5.464379e-17+2.775558e-17i
 [6,] -2.818926e-17+2.602085e-17i  6.938894e-18-6.071532e-18i -8.673617e-19-1.040834e-17i -2.602085e-18-1.734723e-18i
 [7,] -1.301043e-18-6.071532e-18i -5.377643e-17+2.862294e-17i -8.673617e-19-1.734723e-18i  8.673617e-19-1.127570e-17i
 [8,] -2.602085e-18+2.602085e-18i  8.673617e-19-3.469447e-18i -7.112366e-17+5.724587e-17i  5.204170e-18+1.040834e-17i
 [9,]  1.084202e-18-1.734723e-18i  8.673617e-19+0.000000e+00i -8.673617e-19+3.469447e-18i  1.474515e-17-2.602085e-17i
[10,] -2.168404e-19+6.071532e-18i -4.336809e-19-3.469447e-18i  2.602085e-18-3.469447e-18i  6.071532e-18-1.734723e-18i
                            [,90]                       [,91]                       [,92]                       [,93]
 [1,] -6.071532e-18+5.204170e-18i -4.314083e-32-3.081488e-32i  8.673617e-18-2.385245e-18i -1.214306e-17+3.035766e-18i
 [2,] -1.214306e-17+1.301043e-18i -8.628166e-32-3.081488e-32i  1.734723e-18-2.168404e-18i  2.081668e-17+1.734723e-18i
 [3,]  1.734723e-18-7.806256e-18i -2.095412e-31+1.848893e-32i  0.000000e+00+8.673617e-19i  1.040834e-17-3.079134e-17i
 [4,] -6.071532e-18-6.938894e-18i  1.232595e-32-1.848893e-32i  0.000000e+00-8.673617e-19i  1.734723e-18-8.673617e-19i
 [5,]  4.336809e-18-4.336809e-19i -4.930381e-32+1.047706e-31i -1.734723e-18-4.336809e-18i -5.637851e-17+2.775558e-17i
 [6,]  4.119968e-17+2.775558e-17i  1.232595e-32+1.232595e-32i  6.938894e-18-9.107298e-18i -1.734723e-18+3.469447e-18i
 [7,]  2.602085e-18-2.602085e-18i  5.916457e-31+1.232595e-32i -8.673617e-19-1.734723e-18i  6.938894e-18+0.000000e+00i
 [8,] -2.602085e-18-6.938894e-18i  1.848893e-32-6.779273e-32i  3.989864e-17+2.515349e-17i -1.734723e-18-8.673617e-19i
 [9,]  3.035766e-18-8.673617e-19i -5.546678e-32+9.860761e-32i  4.336809e-18+0.000000e+00i  6.852158e-17+1.734723e-18i
[10,]  4.336809e-19-8.673617e-19i  0.000000e+00+6.162976e-33i  2.602085e-18+5.204170e-18i  1.734723e-18+7.806256e-18i
                            [,94]                       [,95]                       [,96]
 [1,] -1.040834e-17+2.168404e-18i  3.122502e-17+7.372575e-18i -1.561251e-17+5.009014e-17i
 [2,] -5.724587e-17-1.205633e-16i  8.673617e-18+4.163336e-17i -1.734723e-18-2.688821e-17i
 [3,] -2.081668e-17+2.602085e-18i  5.551115e-17-5.637851e-17i -1.734723e-18+1.214306e-17i
 [4,] -6.938894e-18+5.030698e-17i  0.000000e+00+1.040834e-17i  2.862294e-17-2.797242e-17i
 [5,] -6.938894e-18+3.469447e-18i  1.734723e-17+2.341877e-17i  8.673617e-19+5.637851e-18i
 [6,] -1.092876e-16+4.336809e-18i -1.734723e-18-1.040834e-17i  8.673617e-19-1.734723e-18i
 [7,]  3.469447e-18-1.561251e-17i -2.428613e-17+5.030698e-17i  3.469447e-18-3.903128e-18i
 [8,] -3.469447e-18+2.775558e-17i  1.127570e-17+8.673617e-18i -2.949030e-17+2.255141e-17i
 [9,]  0.000000e+00-1.734723e-18i -1.387779e-17-8.673617e-19i  2.602085e-18+4.770490e-18i
[10,]  2.775558e-17-3.209238e-17i -8.673617e-19-1.040834e-17i -8.673617e-19-1.301043e-17i
 [ достигнута getOption("max.print") -- пропущено 86 строк ]
plot(1:L, res_comp_wise[[1]][, 2])
Предупреждение в xy.coords(x, y, xlabel, ylabel, log) :
  мнимые части убраны при преобразовании

avr <- averaging(res_comp_wise)

for (i in 1:dim(res$t_series)[2]){
  plot(x, avr[i, ])
}
Ошибка в 1:dim(res$t_series)[2] :аргумент нулевой длины
# Ft %*% sweep(Ft_inv, 1, X[, 1], '*')[2, ]
reconstruct_fft <- function(x, y, frequencies) {
  # Выполняем быстрое преобразование Фурье
  fft_y <- fft(y)

  # Получаем амплитуды и фазы
  amplitudes <- Mod(fft_y)
  phases <- Arg(fft_y)
  
  reconstructed <- matrix(0, length(amplitudes), length(x))
  n <- length(amplitudes)
  for (i in 1:(length(amplitudes))) {
    # print(i)
    reconstructed[i, ] <-
      amplitudes[i] * 
      cos(2 * pi * frequencies[i] * (x) + phases[i]) /
      n
  }
  # plot(x, reconstructed[9, ], main = paste(x[1]), type = "l", col = "red")
  # lines(x, y/2)
  # plot(x, reconstructed[L+2-9, ], main = paste(x[1]))
  return(reconstructed)
}


n <- 96*2-1
x <- 0:(n-1)
L <- 48
frequencies <- (0:(L-1)) / L
y <- sin(2*pi/12 * x)
y_main <- y
x_main <- x

X <- hankel(y, L)
K <- dim(X)[2]
res <- list()
for (i in 1:K){
  y <- X[, i]
  x <- x_main[1:(1 + L - 1)]
  res[[i]] <- reconstruct_fft(x, y, frequencies)
}

# for (i in 1:L){
#   plot(x, res[[i]][9, ])
# }

res_mult <- res
# res

averaging <- function(res_comp_wise_mult){
  K <- dim(X)[2]
  counters <- rep(0, n)
  res <- matrix(0, ncol = n, nrow = L)
  for (i in 1:length(res_comp_wise_mult)){
    res[, i:(i+L-1)] <- res[, i:(i+L-1)] + res_comp_wise_mult[[i]]
    counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
  }
  for (i in 1:n){
    res[, i] <- res[, i] / counters[i]
  }
  res
}

avr <- averaging(res_mult)

group_by_elementary_freq_foureir <- function(res_averaged){
  nf2 <- 0
  if (L %% 2) {
    nf2 <- (L + 1) / 2 - 1
  } else {
    nf2 <- L / 2 - 1
  }
  nft <- nf2 + abs((L %% 2) - 2)
  
  Z <- matrix(0, ncol = nft, nrow = n)
  
  # print(Z |> dim())
  # print(res_averaged |> dim())
  
  Z[, 1] <- res_averaged[1, ]
  for (k in 1:nf2) {
    Z[, k + 1] <- res_averaged[k + 1, ] + res_averaged[L + 2 - (k + 1), ]
  }
  if (L %% 2 != 0) {
    Z[, nft] <- res_averaged[nft, ]
  }
  
  
  return(list(
    t_series = Z,
    freq = (0:dim(Z)[2])/L
  ))
}


rs <- group_by_elementary_freq_foureir(avr)

plot(x_main, rs$t_series[, 5])

IP_values

data_slice <- 1:537
dates_slice <- dates[data_slice]
IP_values_slice <- IP_values[data_slice]
eps <- 1/193


c <- circulant_SSA(IP_values_slice, L = 192, extend_flag = FALSE)
r <- c$t_series






reconstruct_fft <- function(x, y, frequencies) {
  # Выполняем быстрое преобразование Фурье
  fft_y <- fft(y)

  # Получаем амплитуды и фазы
  amplitudes <- Mod(fft_y)
  phases <- Arg(fft_y)
  
  reconstructed <- matrix(0, length(amplitudes), length(x))
  n <- length(amplitudes)
  for (i in 1:(length(amplitudes))) {
    # print(i)
    reconstructed[i, ] <-
      amplitudes[i] * 
      cos(2 * pi * frequencies[i] * (x) + phases[i]) /
      n
  }
  # plot(x, reconstructed[9, ], main = paste(x[1]), type = "l", col = "red")
  # lines(x, y/2)
  # plot(x, reconstructed[L+2-9, ], main = paste(x[1]))
  return(reconstructed)
}


n <- 537
x <- 0:(n-1)
L <- 192
frequencies <- (0:(L-1)) / L
y <- IP_values_slice
y_main <- y
x_main <- x

X <- hankel(y, L)
K <- dim(X)[2]
res <- list()
for (i in 1:K){
  y <- X[, i]
  x <- x_main[1:(1 + L - 1)]
  res[[i]] <- reconstruct_fft(x, y, frequencies)
}

# for (i in 1:L){
#   plot(x, res[[i]][9, ])
# }

res_mult <- res
# res

averaging <- function(res_comp_wise_mult){
  K <- dim(X)[2]
  counters <- rep(0, n)
  res <- matrix(0, ncol = n, nrow = L)
  for (i in 1:length(res_comp_wise_mult)){
    res[, i:(i+L-1)] <- res[, i:(i+L-1)] + res_comp_wise_mult[[i]]
    counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
  }
  for (i in 1:n){
    res[, i] <- res[, i] / counters[i]
  }
  res
}

avr <- averaging(res_mult)

group_by_elementary_freq_foureir <- function(res_averaged){
  nf2 <- 0
  if (L %% 2) {
    nf2 <- (L + 1) / 2 - 1
  } else {
    nf2 <- L / 2 - 1
  }
  nft <- nf2 + abs((L %% 2) - 2)
  
  Z <- matrix(0, ncol = nft, nrow = n)
  
  # print(Z |> dim())
  # print(res_averaged |> dim())
  
  Z[, 1] <- res_averaged[1, ]
  for (k in 1:nf2) {
    Z[, k + 1] <- res_averaged[k + 1, ] + res_averaged[L + 2 - (k + 1), ]
  }
  if (L %% 2 != 0) {
    Z[, nft] <- res_averaged[nft, ]
  }
  
  
  return(list(
    t_series = Z,
    freq = (0:dim(Z)[2])/L
  ))
}


rs <- group_by_elementary_freq_foureir(avr)

# plot(x_main, rs$t_series[, 5])


for (i in 1:dim(r)[2]){
  plot(1:n, rs$t_series[, i], col= "red", type = "l")
  lines(1:n, r[, i])
}
cissa_like_fourier_transform <- function(ts, L){
  reconstruct_fft <- function(x, y, frequencies) {
    # Выполняем быстрое преобразование Фурье
    fft_y <- fft(y)
  
    # Получаем амплитуды и фазы
    amplitudes <- Mod(fft_y)
    phases <- Arg(fft_y)
    
    reconstructed <- matrix(0, length(amplitudes), length(x))
    n <- length(amplitudes)
    for (i in 1:(length(amplitudes))) {
      # print(i)
      reconstructed[i, ] <-
        amplitudes[i] * 
        cos(2 * pi * frequencies[i] * (x) + phases[i]) /
        n
    }
    # plot(x, reconstructed[9, ], main = paste(x[1]), type = "l", col = "red")
    # lines(x, y/2)
    # plot(x, reconstructed[L+2-9, ], main = paste(x[1]))
    return(reconstructed)
  }
  
  
  n <- length(ts)
  x <- 0:(n-1)
  L <- L
  frequencies <- (0:(L-1)) / L
  y <- ts
  y_main <- y
  x_main <- x
  
  X <- hankel(y, L)
  K <- dim(X)[2]
  res <- list()
  for (i in 1:K){
    y <- X[, i]
    x <- x_main[1:(1 + L - 1)]
    res[[i]] <- reconstruct_fft(x, y, frequencies)
  }
  
  # for (i in 1:L){
  #   plot(x, res[[i]][9, ])
  # }
  
  res_mult <- res
  # res
  
  averaging <- function(res_comp_wise_mult){
    K <- dim(X)[2]
    counters <- rep(0, n)
    res <- matrix(0, ncol = n, nrow = L)
    for (i in 1:length(res_comp_wise_mult)){
      res[, i:(i+L-1)] <- res[, i:(i+L-1)] + res_comp_wise_mult[[i]]
      counters[i:(i+L-1)] <- counters[i:(i+L-1)] + 1
    }
    for (i in 1:n){
      res[, i] <- res[, i] / counters[i]
    }
    res
  }
  
  avr <- averaging(res_mult)
  
  group_by_elementary_freq_foureir <- function(res_averaged){
    nf2 <- 0
    if (L %% 2) {
      nf2 <- (L + 1) / 2 - 1
    } else {
      nf2 <- L / 2 - 1
    }
    nft <- nf2 + abs((L %% 2) - 2)
    
    Z <- matrix(0, ncol = nft, nrow = n)
    
    # print(Z |> dim())
    # print(res_averaged |> dim())
    
    Z[, 1] <- res_averaged[1, ]
    for (k in 1:nf2) {
      Z[, k + 1] <- res_averaged[k + 1, ] + res_averaged[L + 2 - (k + 1), ]
    }
    if (L %% 2 != 0) {
      Z[, nft] <- res_averaged[nft, ]
    }
    
    
    return(list(
      t_series = Z,
      freq = (0:dim(Z)[2])/L
    ))
  }


  rs <- group_by_elementary_freq_foureir(avr)
  return(rs)
}
data_slice <- 1:537
dates_slice <- dates[data_slice]
IP_values_slice <- IP_values[data_slice]
eps <- 1/193


c <- circulant_SSA(IP_values_slice, L = 192, extend_flag = FALSE)
r <- c$t_series

c_ft <- cissa_like_fourier_transform(IP_values_slice, L = 192)
r_ft <- c_ft$t_series


for (i in 1:dim(r)[2]){
  plot(1:n, r_ft[, i], col= "red", type = "l", lwd = 2)
  lines(1:n, r[, i])
}

LS0tDQp0aXRsZTogIkNpcmN1bGFudCBTU0EiDQphdXRob3I6ICLQn9C+0LPRgNC10LHQvdC40LrQvtCyINCd0LjQutC+0LvQsNC5Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMg0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INGE0YPQvdC60YbQuNC4DQoNCmBgYHtyfQ0KbGlicmFyeShSc3NhKQ0KbGlicmFyeShzaWduYWwpDQpsaWJyYXJ5KGdzaWduYWwpDQpzb3VyY2UoImVvc3NhX25ldy5SIikNCg0KDQpkZnRtdHggPC0gZnVuY3Rpb24obikgew0KICB5IDwtIHN0YXRzOjptdmZmdChkaWFnKDEsIG4pKQ0KICB5DQp9DQoNCmRpYWdfYXZlcmFnaW5nIDwtIGZ1bmN0aW9uKEEpew0KICBCIDwtIEFbbnJvdyhBKToxLCBdIHw+IFJlKCkNCiAgbGFwcGx5KHNwbGl0KEIsIC0ocm93KEIpIC0gY29sKEIpKSApLCBtZWFuKSB8PiBhcy5udW1lcmljKCkNCn0NCg0Kc2hpZnRfdmVjdG9yIDwtIGZ1bmN0aW9uKHZlYykgew0KICBsYXN0X2VsZW1lbnQgPC0gdGFpbCh2ZWMsIDEpDQogIHZlYyA8LSB2ZWNbLWxlbmd0aCh2ZWMpXQ0KICBzaGlmdGVkX3ZlYyA8LSBjKGxhc3RfZWxlbWVudCwgdmVjKQ0KICByZXR1cm4oc2hpZnRlZF92ZWMpDQp9DQoNCmV4dGVuZCA8LSBmdW5jdGlvbih4LCBIKXsNCiAgIyDQktGL0YfQuNGB0LvQtdC90LjQtSDQutC+0Y3RhNGE0LjRhtC40LXQvdGC0L7QsiBBUiDQvNC+0LTQtdC70Lgg0LTQu9GPINC00LjRhNGE0LXRgNC10L3RhtC40YDQvtCy0LDQvdC90L7Qs9C+INGA0Y/QtNCwDQogIE4gPC0gbGVuZ3RoKHgpDQogIHAgPC0gZmxvb3IoTiAvIDMpDQogIGR4IDwtIGRpZmYoeCkNCiAgIyBBIDwtIGFyKGR4LCBvcmRlci5tYXggPSBwLCBtZXRob2QgPSAieXVsZS13YWxrZXIiKSRhcg0KICBBIDwtIGFyeXVsZShkeCwgcCkkYQ0KICANCiAgIyDQn9GA0LDQstC+0LUg0YDQsNGB0YjQuNGA0LXQvdC40LUNCiAgeSA8LSB4DQogIGR5IDwtIGRpZmYoeSkNCiAgZXIgPC0gc2lnbmFsOjpmaWx0ZXIoQSwgMSwgZHkpDQogIGR5IDwtIHNpZ25hbDo6ZmlsdGVyKDEsIEEsIGMoZXIsIHJlcCgwLCBIKSkpDQogIHkgPC0geVsxXSArIGMoMCwgY3Vtc3VtKGR5KSkNCiAgDQogICMg0JvQtdCy0L7QtSDRgNCw0YHRiNC40YDQtdC90LjQtQ0KICB5IDwtIHJldih5KQ0KICBkeSA8LSBkaWZmKHkpDQogIGVyIDwtIHNpZ25hbDo6ZmlsdGVyKEEsMSxkeSkNCiAgZHkgPC0gc2lnbmFsOjpmaWx0ZXIoMSxBLGMoZXIsIHJlcCgwLCBIKSkpDQogIHkgPC0geVsxXSArIGMoMCwgY3Vtc3VtKGR5KSkNCiAgDQogICMg0KDQsNGB0YjQuNGA0LXQvdC90YvQuSDRgNGP0LQNCiAgeGUgPC0gcmV2KHkpDQogIA0KICAjINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0L7Qsg0KICB4ZSANCn0NCmBgYA0KDQojIyBDaVNTQQ0KDQrQn9C+0LTQsNGR0YLRgdGPINC90LAg0LLRhdC+0LQg0LLRgNC10LzQtdC90L3QvtC5INGA0Y/QtCwg0LTQu9C40L3QsCDQvtC60L3QsCAo0LXRgdC70Lgg0LXRkSDQvdC10YIsINGC0L4g0L7QvdCwINGA0LDQstC90LAg0LTQu9C40L3QtSDRgNGP0LTQsCArIDEg0L/QvtC/0L7Qu9Cw0LwpINC4INC40L3RhNC+0YDQvNCw0YbQuNGPINC+INGC0L7QvCwg0L3Rg9C20L3QviDQu9C4INGA0LDRgdGI0LjRgNC40YLRjCDRgNGP0LQuINCg0LDRgdGI0LjRgNGP0YLRjCDRgNGP0LQg0YHRgtC+0LjRgiDQv9GA0Lgg0YHRgtC+0YXQsNGB0YLQuNGH0LXRgdC60L7QvCDRgtGA0LXQvdC00LUgKEF1dG9yZWdyZXNzaXZlIGV4dGVuc2lvbiAoZGVmYXVsdCkuIEl0IGlzIGluZGljYXRlZCBmb3Igc3RhdGlvbmFyeSBhbmQgc3RvY2hhc3RpYyB0cmVuZCB0aW1lIHNlcmllcyBhcyB3ZWxsKS4g0KDQtdCw0LvQuNC30L7QstCw0L3QviDRgtC+0LvRjNC60L4gQXV0b3JlZ3Jlc3NpdmUgZXh0ZW5zaW9uLg0KDQpcDQrQndCwINCy0YvRhdC+0LTQtSDRgdC/0LjRgdC+0Log0LLRi9C00LDRkdGC0YHRjyDRgdC/0LjRgdC+0LogbGlzdCh0X3NlcmllcywgaW1wb3J0YW5jZSkuXA0KdF9zZXJpZXMg4oCUINC80LDRgtGA0LjRhtCwLCDQv9C+INGB0YLQvtC70LHRhtCw0Lwg0LrQvtGC0L7RgNC+0Lkg0YDQsNGB0L/QvtC70LDQs9Cw0Y7RgtGB0Y8g0LLRgNC10LzQtdC90L3Ri9C1INGA0Y/QtNGLLCDQvtGC0LLQtdGH0LDRjtGJ0LjQtSDQt9CwINGH0LDRgdGC0L7RgtGLIChpLTEpL0wsINCz0LTQtSBpIOKAlCDQvdC+0LzQtdGAINGB0YLQvtC70LHRhtCwLCBMIOKAlCDQtNC70LjQvdCwINC+0LrQvdCwLlwNCmltcG9ydGFuY2Ug4oCUINCy0LXQutGC0L7RgCwg0L7RgtCy0LXRh9Cw0Y7RidC40Lkg0LfQsCDQt9C90LDRh9C40LzQvtGB0YLRjCBpLdC+0LPQviDQstGA0LXQvNC10L3QvdC+0LPQviDRgNGP0LTQsCDQsiDRgNCw0LfQu9C+0LvQttC10L3QuNC4LiDQp9C10Lwg0LHQvtC70YzRiNC1INC30L3QsNGH0LXQvdC40LUsINGC0LXQvCDQsdC+0LvRjNGI0LjQuSDQstC60LvQsNC0INCy0L3RkdGBIGkt0YLRi9C5INCy0YDQtdC80LXQvdC90L7QuSDRgNGP0LQuDQoNCmBgYHtyfQ0KY2lyY3VsYW50X1NTQSA8LSBmdW5jdGlvbih0cywgTCA9IE5VTEwsIGV4dGVuZF9mbGFnID0gRkFMU0Upew0KICB0aW1lX3NlcmllcyA8LSB0cw0KICAjIENvbnN0cnVjdCB0cmFqZWN0b3J5IG1hdHJpeA0KICBOIDwtIGxlbmd0aCh0aW1lX3NlcmllcykNCiAgaWYgKGlzLm51bGwoTCkpew0KICAgIEwgPC0gKE4gKyAxKSUvJTINCiAgfQ0KICAjINCf0YDQvtCy0LXRgNC60LAg0L3QsCDRgNCw0YHRiNC40YDQtdC90LjRjyDRgNGP0LTQsA0KICBpZiAoZXh0ZW5kX2ZsYWcgPT0gRkFMU0Upew0KICAgIEggPC0gMA0KICAgIHRpbWVfc2VyaWVzIDwtIHRzDQogIH0NCiAgZWxzZXsNCiAgICBIIDwtIEwNCiAgICB0aW1lX3NlcmllcyA8LSBleHRlbmQodHMsIEgpDQogIH0NCiAgDQogIFggPC0gaGFua2VsKHRpbWVfc2VyaWVzLCBMKQ0KICANCiAgIyBOdW1iZXIgb2Ygc3ltbWV0cmljIGZyZXF1ZW5jeSBwYWlycyBhcm91bmQgMS8yDQogIGlmIChMICUlIDIpIHsNCiAgICBuZjIgPC0gKEwgKyAxKSAvIDIgLSAxDQogIH0gZWxzZSB7DQogICAgbmYyIDwtIEwgLyAyIC0gMQ0KICB9DQogIA0KICAjIE51bWJlciBvZiBmcmVxdWVuY2llcyA8PSAxLzINCiAgbmZ0IDwtIG5mMiArIGFicygoTCAlJSAyKSAtIDIpDQogIA0KICAjIERlY29tcG9zaXRpb24NCiAgIyBFc3RpbWF0ZSBhdXRvY292YXJpYW5jZSAgICAgT0sNCiAgYXV0b2NvdiA8LSBudW1lcmljKEwpDQogIGZvciAobSBpbiAwOihMLTEpKXsNCiAgICBhdXRvY292W1ttKzFdXSA8LSBzdW0odGltZV9zZXJpZXNbMTooTi1tKV0gKiB0aW1lX3Nlcmllc1soMSttKTpOXSkgLyAoTi1tKQ0KICB9DQogIA0KICAjIEZpcnN0IHJvdyBvZiBjaXJjdWxhbnQgbWF0cml4DQogIGNpcmNfZmlyc3Rfcm93IDwtIG51bWVyaWMoTCkNCiAgZm9yIChtIGluIDA6KEwtMSkpew0KICAgIGNpcmNfZmlyc3Rfcm93W1ttKzFdXSA8LSAoTC1tKS9MICogYXV0b2NvdltbbSsxXV0gKyAobSkvTCAqIGF1dG9jb3ZbW0wtbV1dDQogIH0NCiAgDQogICMgQnVpbGQgY2lyY3VsYW50IG1hdHJpeA0KICBTX0MgPC0gbWF0cml4KGNpcmNfZmlyc3Rfcm93LCBucm93ID0gMSkNCiAgc2hpZnRlZF92ZWN0b3IgPC0gY2lyY19maXJzdF9yb3cNCiAgZm9yIChpIGluIDI6KEwpKSB7DQogICAgc2hpZnRlZF92ZWN0b3IgPC0gc2hpZnRfdmVjdG9yKHNoaWZ0ZWRfdmVjdG9yKQ0KICAgICMgU19DIDwtIHJiaW5kKFNfQywgYXMudmVjdG9yKHNoaWZ0ZWRfdmVjdG9yKSkNCiAgICBTX0MgPC0gcmJpbmQoYXMudmVjdG9yKHNoaWZ0ZWRfdmVjdG9yKSwgU19DKQ0KICB9DQogIA0KICAjIEVpZ2VudmVjdG9ycyBvZiBjaXJjdWxhbnQgbWF0cml4ICh1bml0YXJ5IGJhc2UpDQogIFUgPC0gZGZ0bXR4KEwpL3NxcnQoTCkNCiAgDQogICMgUmVhbCBlaWdlbnZlY3RvcnMgKG9ydGhvbm9ybWFsIGJhc2UpDQogIFVbLCAxXSA8LSBSZShVWywgMV0pDQogIGZvciAoayBpbiAxOm5mMikgew0KICAgIHVfayA8LSBVWywgayArIDFdDQogICAgVVssIGsgKyAxXSA8LSBzcXJ0KDIpICogUmUodV9rKQ0KICAgIFVbLCBMICsgMiAtIChrICsgMSldIDwtIHNxcnQoMikgKiBJbSh1X2spDQogIH0NCiAgaWYgKEwgJSUgMiAhPSAwKSB7DQogICAgVVssIG5mdF0gPC0gUmUoVVssIG5mdF0pDQogIH0NCiAgDQogICMgRWlnZW52YWx1ZXMgb2YgY2lyY3VsYW50IG1hdHJpeDogZXN0aW1hdGVkIHBvd2VyIHNwZWN0cmFsIGRlbnNpdHkNCiAgcHNkIDwtIGFicyhkaWFnKHQoVSkgJSolIFNfQyAlKiUgVSkpDQogIA0KICAjIFByaW5jaXBhbCBjb21wb25lbnRzDQogIFcgPC0gdChVKSAlKiUgWA0KICAjIFJlY29uc3RydWN0aW9uDQogICMgRWxlbWVudGFyeSByZWNvbnN0cnVjdGVkIHNlcmllcw0KICBSIDwtIG1hdHJpeCgwLCBucm93ID0gTisyKkgsIG5jb2wgPSBMKQ0KICBmb3IgKGsgaW4gMTpMKSB7DQogICAgUlssIGtdIDwtIFVbICxrXSAlKiUgdChXW2ssIF0pIHw+IGRpYWdfYXZlcmFnaW5nKCkNCiAgfQ0KICANCiAgIyBHcm91cGluZyBieSBmcmVxdWVuY3kNCiAgIyBFbGVtZW50YXJ5IHJlY29uc3RydWN0ZWQgc2VyaWVzIGJ5IGZyZXF1ZW5jeQ0KICBaIDwtIG1hdHJpeCgwLCBucm93ID0gTisyKkgsIG5jb2wgPSBuZnQpDQogIFpbLCAxXSA8LSBSWywgMV0NCiAgIyBJbXBvcnRhbmNlIG9mIGNvbXBvbmVudA0KICBpbXAgPC0gbnVtZXJpYyhuZnQpDQogIGxhbWJkYV9zbSA8LSBzdW0ocHNkKQ0KICBpbXBbMV0gPC0gcHNkWzFdL2xhbWJkYV9zbQ0KICBmb3IgKGsgaW4gMTpuZjIpIHsNCiAgICBaWywgayArIDFdIDwtIFJbLCBrICsgMV0gKyBSWywgTCArIDIgLSAoayArIDEpXQ0KICAgIGltcFtrKzFdIDwtIChwc2RbaysxXSArIHBzZFsgTCArIDIgLSAoayArIDEpXSkvbGFtYmRhX3NtDQogIH0NCiAgaWYgKEwgJSUgMiAhPSAwKSB7DQogICAgWlssIG5mdF0gPC0gUlssIG5mdF0NCiAgICBpbXBbbmZ0XSA8LSBwc2RbbmZ0XSAvIGxhbWJkYV9zbQ0KICB9DQogIA0KICBsaXN0KHRfc2VyaWVzID0gWlsoSCsxKTooTitIKSxdLA0KICAgICAgIGltcG9ydGFuY2UgPSBpbXAsDQogICAgICAgZnJlcSA9ICgwOihsZW5ndGgoaW1wKSAtMSkpL0wNCiAgICAgICApDQp9DQpgYGANCg0KYGBge3J9DQojIGdyb3VwcyAtIGxpc3Qgb2YgZnJlcXVlbmNpZXMNCmdyb3VwaW5nX2Npc3NhIDwtIGZ1bmN0aW9uKGNpc3NhX3JlcywgZ3JvdXBzKXsNCiAgZnJlcSA8LSBjaXNzYV9yZXMkZnJlcQ0KICB0X3NlcmllcyA8LSBjaXNzYV9yZXMkdF9zZXJpZXMNCiAgDQogIHJlc2lkdWFscyA8LSAwDQogIHJlc3VsdCA8LSBzZXROYW1lcyhhcy5saXN0KHJlcCgwLCBsZW5ndGgoZ3JvdXBzKSkpLCBuYW1lcyhncm91cHMpKQ0KICBmb3IgKGkgaW4gMTpsZW5ndGgoY2lzc2FfcmVzJGZyZXEpKXsNCiAgICBmbGFnIDwtIEZBTFNFDQogICAgZm9yIChuYW1lIGluIG5hbWVzKGdyb3Vwcykpew0KICAgICAgaWYgKGdyb3Vwc1tbbmFtZV1dWzFdIDw9IGZyZXFbaV0gJiBmcmVxW2ldIDw9IGdyb3Vwc1tbbmFtZV1dWzJdKXsNCiAgICAgICAgZmxhZyA8LSBUUlVFDQogICAgICAgIHJlc3VsdFtbbmFtZV1dIDwtIHJlc3VsdFtbbmFtZV1dICsgdF9zZXJpZXNbLCBpXQ0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBpZiAoZmxhZyA9PSBGQUxTRSl7DQogICAgICByZXNpZHVhbHMgPC0gcmVzaWR1YWxzICsgdF9zZXJpZXNbLCBpXQ0KICAgIH0NCiAgfQ0KICANCiAgcmVzdWx0W1sicmVzaWR1YWxzIl1dIDwtIHJlc2lkdWFscw0KICByZXN1bHQNCn0NCmBgYA0KDQpgYGB7cn0NCmdlbmVyYXRlX3RzIDwtIGZ1bmN0aW9uKGZ1bmMsIG49MWUzLCAuLi4pew0KICAxOm4gfD4gZnVuYyguLi4pIHw+IHRzKCkNCn0NCg0KZl9jb3MgPC0gZnVuY3Rpb24oeCwgQSA9IDEsIG9tZWdhID0gMS80LCBwaGkgPSAwKXsNCiAgZl9leHBfbW9kX2hhcm1fc2VyaWVzKHgsIEEsIGFscGhhID0gMCwgb21lZ2EgPSBvbWVnYSwgcGhpID0gcGhpKQ0KfQ0KDQpmX3NpbiA8LSBmdW5jdGlvbih4LCBBID0gMSwgb21lZ2EgPSAxLzQsIHBoaSA9IDMqcGkvMil7DQogIGZfZXhwX21vZF9oYXJtX3Nlcmllcyh4LCBBLCBhbHBoYSA9IDAsIG9tZWdhID0gb21lZ2EsIHBoaSA9IHBoaSkNCn0NCg0KZl9leHAgPC0gZnVuY3Rpb24oeCwgQSA9IDEsIGFscGhhID0gMSl7DQogIEEgKiBleHAoYWxwaGEgKiB4KQ0KfQ0KDQpmX2V4cF9jb3MgPC0gZnVuY3Rpb24oeCwgQSA9IDEsIGFscGhhID0gMSwgb21lZ2EgPSAxLzQsIHBoaSA9IDApew0KICBmX2V4cF9tb2RfaGFybV9zZXJpZXMoeCwgQSwgYWxwaGEsIG9tZWdhLCBwaGkpDQp9DQoNCmZfY29uc3QgPC0gZnVuY3Rpb24oeCwgQyA9IDApew0KICByZXAoQywgbGVuZ3RoKHgpKQ0KfQ0KDQpmX2V4cF9tb2RfaGFybV9zZXJpZXMgPC0gZnVuY3Rpb24oeCwgQSA9IDEsIGFscGhhID0gMSwgb21lZ2EgPSAxLzQsIHBoaSA9IDApew0KICBBKmV4cChhbHBoYSp4KSpjb3MoMipwaSpvbWVnYSp4ICsgcGhpKQ0KfQ0KDQpmX2xpbmVhciA8LSBmdW5jdGlvbih4LCBhID0gMSwgYiA9IDApew0KICBhKnggKyBiDQp9DQptc2UgPC0gZnVuY3Rpb24oZl90cnVlLCBmX3JlY29uc3RydWN0ZWQpew0KICAgbWVhbigoZl90cnVlIC0gZl9yZWNvbnN0cnVjdGVkKV4yKSANCn0NCmBgYA0KDQojIyMjINCe0YjQuNCx0LrQsCDQv9GA0LggTHcgaW4gTiwgS3cgbm90IGluIE4NCg0KYGBge3J9DQpuIDwtIDk2KjIrNQ0KTCA8LSA5Ng0KZl9zdW0gPC0gZnVuY3Rpb24oeCl7DQogIGZfY29uc3QoeCwgQyA9IDEpICsgZl9jb3MoeCwgb21lZ2EgPSAxLzEyKSANCn0NCg0KDQpmX2NvbnN0IHw+IGdlbmVyYXRlX3RzKG4sIEMgPSAxKSB8Pg0KICBwbG90KGNvbCA9ICJncmVlbiIsIHlsaW0gPSBjKC0xLCAyKSwgeWxhYiA9ICJmX24iKQ0KZl9jb3MgfD4NCiAgZ2VuZXJhdGVfdHMobiwgb21lZ2EgPSAxLzEyKSB8Pg0KICBsaW5lcyhjb2w9ImdyZWVuIikNCmZfc3VtIHw+IGdlbmVyYXRlX3RzKG4pIHw+IGxpbmVzKGx3ZCA9IDMsIGNvbD0ncmVkJykNCmZfbiA8LSBmX3N1bSgxOm4pDQoNCg0KDQpjIDwtIGNpcmN1bGFudF9TU0EoZl9uLCBMID0gOTYsIGV4dGVuZF9mbGFnID0gRkFMU0UpDQpyIDwtIGdyb3VwaW5nX2Npc3NhKGMsDQogICAgICAgICAgICAgICBncm91cHMgPSBsaXN0KA0KICAgICAgICAgICAgICAgICB0cmVuZCA9IGMoMCwgMS8xMDApLA0KICAgICAgICAgICAgICAgICBzZXNvbmFsID0gYygxLzk5LCAxLzEwKQ0KICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgKQ0KDQpmX0MgPC0gZl9jb25zdCB8PiBnZW5lcmF0ZV90cyhuLCBDID0gMSkNCmZfYyA8LSBmX2NvcyB8PiBnZW5lcmF0ZV90cyhuLCBvbWVnYSA9IDEvMTIpDQpwcmludCgi0J7RiNC40LHQutC4INC/0YDQuCBDaVNTQSIpDQpwcmludChwYXN0ZSgi0J7RiNC40LHQutCwINC/0YDQuCDQstGL0YfQuNGB0LvQtdC90LjQuCBDID0gMTogIiwgbXNlKGZfQywgciR0cmVuZCkgfD4gZm9ybWF0KHNjaWVudGlmaWMgPSBUUlVFLCBkaWdpdHMgPSAyKSApKQ0KcHJpbnQocGFzdGUoItCe0YjQuNCx0LrQsCDQv9GA0Lgg0LLRi9GH0LjRgdC70LXQvdC40LggY29zKHBpLzEyKTogIiwgbXNlKGZfYywgciRzZXNvbmFsKSB8PiBmb3JtYXQoc2NpZW50aWZpYyA9IFRSVUUsIGRpZ2l0cyA9IDIpICkpDQoNCmxpbmVzKDE6biwgciR0cmVuZCwgY29sPSJibHVlIikNCmxpbmVzKDE6biwgciRzZXNvbmFsLCBjb2w9ImJsdWUiKQ0KDQpmX2NvbnN0IHw+IGdlbmVyYXRlX3RzKG4sIEMgPSAxKSB8Pg0KICBwbG90KGNvbCA9ICJncmVlbiIsIHlsaW0gPSBjKC0xLCAyKSwgeWxhYiA9ICJmX24iKQ0KZl9jb3MgfD4NCiAgZ2VuZXJhdGVfdHMobiwgb21lZ2EgPSAxLzEyKSB8Pg0KICBsaW5lcyhjb2w9ImdyZWVuIikNCmZfc3VtIHw+IGdlbmVyYXRlX3RzKG4pIHw+IGxpbmVzKGx3ZCA9IDMsIGNvbD0ncmVkJykNCmZfbiA8LSBmX3N1bSgxOm4pDQoNCnMgPC0gc3NhKGZfbiwgTCA9IDk2KQ0KciA8LSByZWNvbnN0cnVjdChzLCBncm91cHM9bGlzdCgNCiAgdHJlbmQgPSAxLA0KICBzZXNvbmFsID0gMjozDQopKQ0KDQoNCnByaW50KCLQntGI0LjQsdC60Lgg0L/RgNC4IFNTQSIpDQpwcmludChwYXN0ZSgi0J7RiNC40LHQutCwINC/0YDQuCDQstGL0YfQuNGB0LvQtdC90LjQuCBDID0gMTogIiwgbXNlKGZfQywgciR0cmVuZCkgfD4gZm9ybWF0KHNjaWVudGlmaWMgPSBUUlVFLCBkaWdpdHMgPSAyKSAgKSkNCnByaW50KHBhc3RlKCLQntGI0LjQsdC60LAg0L/RgNC4INCy0YvRh9C40YHQu9C10L3QuNC4IGNvcyhwaS8xMik6ICIsIG1zZShmX2MsIHIkc2Vzb25hbCkgfD4gZm9ybWF0KHNjaWVudGlmaWMgPSBUUlVFLCBkaWdpdHMgPSAyKSkpDQoNCmxpbmVzKDE6biwgciR0cmVuZCkNCmxpbmVzKDE6biwgciRzZXNvbmFsKQ0KYGBgDQoNCiMjIyMg0J/RgNC+0LLQtdGA0LrQsCDRgNCw0LfQtNC10LvQuNC80L7RgdGC0Lgg0L3QtdC/0LXRgNC40L7QtNC40YfQtdGB0LrQuNGFINC60L7QvNC/0L7QvdC10L3RgiArINCw0LLRgtC+0LPRgNGD0L/Qv9C40YDQvtCy0LrQsCBTU0ENCg0KYGBge3J9DQpuIDwtIDk2KjItMQ0KTCA8LSA5Ng0KDQpDIDwtIDENCm9tZWdhX2NzIDwtIDEvMTINCm9tZWdhX3NuIDwtIDEvMjQNCmEgPC0gMS8xMDANCmZfc3VtIDwtIGZ1bmN0aW9uKHgpew0KICBmX2NvbnN0KHgsIEMgPSBDKSArDQogICAgZl9jb3MoeCwgb21lZ2EgPSBvbWVnYV9jcykgKw0KICAgIGZfZXhwKHgsIGEgPSBhKSArDQogICAgZl9zaW4oeCwgb21lZ2EgPSBvbWVnYV9zbikNCn0NCg0KDQpmX0MgPC0gZl9jb25zdCB8PiBnZW5lcmF0ZV90cyhuLCBDID0gQykNCmZfYyA8LSBmX2NvcyB8PiBnZW5lcmF0ZV90cyhuLCBvbWVnYSA9IG9tZWdhX2NzKQ0KZl9zIDwtIGZfc2luIHw+IGdlbmVyYXRlX3RzKG4sIG9tZWdhID0gb21lZ2Ffc24pDQpmX2UgPC0gZl9leHAgfD4gZ2VuZXJhdGVfdHMobiwgYSA9IGEpDQoNCmZfbiA8LSBmX3N1bSgxOm4pDQoNCmxpYnJhcnkoeHRhYmxlKQ0KDQojINCo0LDQsyAyOiDQodC+0LfQtNCw0L3QuNC1INC/0YDQuNC80LXRgNCwINC00LDQvdC90YvRhQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICDQnNC10YLQvtC0ID0gYygiU1NBIiwgIkNpU1NBIiksDQogIGVfZXJyID0gYygyMCwgMjApLA0KICBjX2VyciA9IGMoMjMsIDM1KSwNCiAgZWNfZXJyID0gYygyMCwgMjApLA0KICBzaW5fZXJyID0gYyAoMjAsIDIwKSwNCiAgY29zX2VyciA9IGMoMSwgMSkNCikNCg0KDQojINCe0YLRgNC40YHQvtCy0LrQsCDRgNGP0LTQsCBmX24NCnBsb3QoZl9uLCB0eXBlID0gImwiLCBsd2QgPSAzLCBjb2wgPSAncmVkJywgeWxpbSA9IGMoLTIsIDEwKSwNCiAgICAgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNGPINGA0Y/QtNCwIiwgbWFpbiA9ICLQoNCw0LfQu9C+0LbQtdC90LjQtSDQstGA0LXQvNC10L3QvdC+0LPQviDRgNGP0LTQsCIpDQoNCiMg0JTQvtCx0LDQstC70LXQvdC40LUg0L7RgtC00LXQu9GM0L3Ri9GFINC60L7QvNC/0L7QvdC10L3RgtC+0LIgKGZfQywgZl9jLCBmX2UpDQpsaW5lcyhmX0MsIGNvbCA9ICJibHVlIikgICMg0JrQvtC80L/QvtC90LXQvdGCIGZfQw0KbGluZXMoZl9jLCBjb2wgPSAiYmx1ZSIpICAjINCa0L7QvNC/0L7QvdC10L3RgiBmX2MNCmxpbmVzKGZfZSwgY29sID0gImJsdWUiKSAgIyDQmtC+0LzQv9C+0L3QtdC90YIgZl9lDQpsaW5lcyhmX3MsIGNvbCA9ICJibHVlIikNCg0KIyDQm9C10LPQtdC90LTQsA0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygi0JLQtdGB0Ywg0YDRj9C0IiwgItCa0L7QvNC/0L7QvdC10L3RgtGLIiksIA0KICAgICAgIGNvbCA9IGMoInJlZCIsICJibHVlIiksIGx0eSA9IDEsIGx3ZCA9IDMpDQoNCg0KDQoNCg0KDQoNCg0KYyA8LSBjaXJjdWxhbnRfU1NBKGZfbiwgTCA9IEwsIGV4dGVuZF9mbGFnID0gVFJVRSkNCiMgciA8LSBjJHRfc2VyaWVzDQpyIDwtIGdyb3VwaW5nX2Npc3NhKGMsDQogICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IGxpc3QoDQogICAgICAgICAgICAgICAgICAgICAgIyB0cmVuZCA9IGMoMCwgMS8xMDApLA0KICAgICAgICAgICAgICAgICAgICAgIHRyZW5kID0gYygwLCAxLzEwMDApLA0KICAgICAgICAgICAgICAgICAgICAgIHNlc29uYWxfY29zID0gYygxLzE0LCAxLzEwKSwNCiAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsX3NpbiA9IGMoMS8yNiwgMS8yMykNCiAgICAgICAgICAgICAgICAgICAgKSkNCg0KZGF0YSRjb3NfZXJyWzJdIDwtIG1zZShmX3MsIHIkc2Vzb25hbF9zaW4pIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KZGF0YSRzaW5fZXJyWzJdIDwtIG1zZShmX2MsIHIkc2Vzb25hbF9jb3MpIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KZGF0YSRlY19lcnJbMl0gPC0gbXNlKGZfQytmX2UsIHIkdHJlbmQpIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KDQoNCiMgcG5nKCJDOi9Vc2Vycy9uaWsxbS9EZXNrdG9wL9GD0L3QuNC6LzYg0YHQtdC8L9C60YPRgNGB0LDRhy/QotC10LrRgdGCINGA0LDQsdC+0YLRiy9pbWcvdHJlbmQgaW5zZXBhcmFiaWxpdHkvQ2lTU0EucG5nIikgICMg0YHQvtGF0YDQsNC90LXQvdC40LUg0LIg0YTQvtGA0LzQsNGC0LUgUE5HDQoNCnBsb3QoMTpuLCBmX24sIHR5cGUgPSAibCIsIGx3ZD0zLCB5bGltPSBjKC0yLCAxMCksIGNvbD0icmVkIiwNCiAgICAgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNGPINGA0Y/QtNCwIiwgbWFpbiA9ICJDaVNTQSDRgNCw0LfQu9C+0LbQtdC90LjQtSDQstGA0LXQvNC10L3QvdC+0LPQviDRgNGP0LTQsCIpDQpsaW5lcygxOm4sIHIkdHJlbmQsIGNvbCA9ICJibHVlIikNCmxpbmVzKDE6biwgciRzZXNvbmFsX3NpbiwgY29sID0gImJsdWUiKQ0KbGluZXMoMTpuLCByJHNlc29uYWxfY29zLCBjb2wgPSAiYmx1ZSIpDQoNCiMg0JvQtdCz0LXQvdC00LANCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoItCS0LXRgdGMINGA0Y/QtCIsICLQmtC+0LzQv9C+0L3QtdC90YLRiyIpLCANCiAgICAgICBjb2wgPSBjKCJyZWQiLCAiYmx1ZSIpLCBsdHkgPSAxLCBsd2QgPSAzKQ0KDQojIGRldi5vZmYoKSAgIyDQt9Cw0LLQtdGA0YjQtdC90LjQtSDRgdC+0YXRgNCw0L3QtdC90LjRjw0KDQoNCg0KDQoNCg0KDQoNCg0KDQpzIDwtIHNzYShmX24sIEwpDQplIDwtIGVvc3NhKHMsIDE6MTAsIGsgPSA3KQ0KDQpnX3Nlc29uYWwgPC0gZ3JvdXBpbmcuYXV0byhlLCBiYXNlID0gImVpZ2VuIiwNCiAgICAgICAgICAgICAgICAgICBmcmVxLmJpbnMgPSBsaXN0KHRyZW5kID0gYygwLjAwMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsMiA9IGMoMS8yNSwgMS8yMyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsMSA9IGMoMS8xMywgMS8xMSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gMC4xKQ0KDQoNCnIgPC0gUnNzYTo6cmVjb25zdHJ1Y3QoZSwgZ3JvdXBzPWMobGlzdChleHAgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Nlc29uYWwpDQogICAgICAgICAgICAgICAgICkNCg0KcGxvdCh3Y29yKGUsIGdyb3VwcyA9IDE6MjQpLCBzY2FsZXMgPSBsaXN0KGF0ID0gYygxMCwgMjAsIDMwKSkpDQoNCmRhdGEkY19lcnJbMV0gPC0gbXNlKGZfQywgciRDKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCmRhdGEkZV9lcnJbMV0gPC0gbXNlKGZfZSwgciRleHApIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KZGF0YSRjb3NfZXJyWzFdIDwtIG1zZShmX2MsIHIkc2Vzb25hbDEpIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KZGF0YSRzaW5fZXJyWzFdIDwtIG1zZShmX3MsIHIkc2Vzb25hbDIpIHw+IGZvcm1hdEMoZm9ybWF0ID0gImUiLCBkaWdpdHMgPSAxKQ0KZGF0YSRlY19lcnJbMV0gPC0gbXNlKGZfQytmX2UsIHIkQytyJGV4cCkgfD4gZm9ybWF0Qyhmb3JtYXQgPSAiZSIsIGRpZ2l0cyA9IDEpDQoNCg0KIyBwbmcoIkM6L1VzZXJzL25pazFtL0Rlc2t0b3Av0YPQvdC40LovNiDRgdC10Lwv0LrRg9GA0YHQsNGHL9Ci0LXQutGB0YIg0YDQsNCx0L7RgtGLL2ltZy90cmVuZCBpbnNlcGFyYWJpbGl0eS9TU0EucG5nIikgICMg0YHQvtGF0YDQsNC90LXQvdC40LUg0LIg0YTQvtGA0LzQsNGC0LUgUE5HDQoNCnBsb3QoMTpuLCBmX24sIHR5cGUgPSAibCIsIGx3ZD0zLCB5bGltPSBjKC0yLCAxMCksIGNvbD0icmVkIiwNCiAgICAgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNGPINGA0Y/QtNCwIiwgbWFpbiA9ICJTU0Eg0YDQsNC30LvQvtC20LXQvdC40LUg0LLRgNC10LzQtdC90L3QvtCz0L4g0YDRj9C00LAiKQ0KDQpsaW5lcygxOm4sIHIkdHJlbmQsIHR5cGUgPSAibCIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMoMTpuLCByJGV4cCwgdHlwZSA9ICJsIiwgeWxpbT0gYygtMiwgMTApLCBjb2w9ImJsdWUiKQ0KbGluZXMoMTpuLCByJEMsIGNvbCA9ICJibHVlIikNCmxpbmVzKDE6biwgciRzZXNvbmFsMSwgY29sID0gImJsdWUiKQ0KbGluZXMoMTpuLCByJHNlc29uYWwyLCBjb2wgPSAiYmx1ZSIpDQoNCiMg0JvQtdCz0LXQvdC00LANCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoItCS0LXRgdGMINGA0Y/QtCIsICLQmtC+0LzQv9C+0L3QtdC90YLRiyIpLCANCiAgICAgICBjb2wgPSBjKCJyZWQiLCAiYmx1ZSIpLCBsdHkgPSAxLCBsd2QgPSAzKQ0KDQoNCg0KDQoNCg0KDQojINCo0LDQsyAzOiDQn9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1INC00LDQvdC90YvRhSDQsiDRhNC+0YDQvNCw0YIgTGFUZVgNCnRhYmxlX2xhdGV4IDwtIHh0YWJsZShkYXRhLCBjYXB0aW9uID0gIkV4YW1wbGUgVGFibGUiKQ0KDQojINCo0LDQsyA0OiDQktGL0LLQvtC0INGC0LDQsdC70LjRhtGLINCyIExhVGVYINGE0LDQudC7DQpwcmludCh0YWJsZV9sYXRleCwgaW5jbHVkZS5yb3duYW1lcyA9IEZBTFNFKQ0KDQoNCg0KDQoNCmBgYA0KDQojIyMjINCf0YDQuNC80LXRgCBjb3NcKmV4cA0KDQpgYGB7cn0NCm4gPC0gOTYqMi0xDQpMIDwtIDk2DQplcHMgPC0gMS8oTCsxKQ0KDQpDIDwtIDENCm9tZWdhX2NzIDwtIDEvMTINCm9tZWdhX3NuIDwtIDEvMjQNCmEgPC0gMS8xMDANCm9tZWdhX2V4cCA8LSAxLzQ4DQpmX3N1bSA8LSBmdW5jdGlvbih4KXsNCiAgICBmX2Nvcyh4LCBvbWVnYSA9IG9tZWdhX2NzKSArDQogICAgZl9leHBfbW9kX2hhcm1fc2VyaWVzKHgsIGEgPSBhLCBvbWVnYSA9IG9tZWdhX2V4cCkgKw0KICAgIGZfc2luKHgsIG9tZWdhID0gb21lZ2Ffc24pDQp9DQoNCg0KZl9jIDwtIGZfY29zIHw+IGdlbmVyYXRlX3RzKG4sIG9tZWdhID0gb21lZ2FfY3MpDQpmX3MgPC0gZl9zaW4gfD4gZ2VuZXJhdGVfdHMobiwgb21lZ2EgPSBvbWVnYV9zbikNCmZfZSA8LSBmX2V4cF9tb2RfaGFybV9zZXJpZXMgfD4gZ2VuZXJhdGVfdHMobiwgYSA9IGEsIG9tZWdhID0gb21lZ2FfZXhwKQ0KDQpmX24gPC0gZl9zdW0oMTpuKQ0KDQpsaWJyYXJ5KHh0YWJsZSkNCg0KIyDQqNCw0LMgMjog0KHQvtC30LTQsNC90LjQtSDQv9GA0LjQvNC10YDQsCDQtNCw0L3QvdGL0YUNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAg0JzQtdGC0L7QtCA9IGMoIlNTQSIsICJDaVNTQSIpLA0KICBleHBfZXJyID0gYygyMCwgMjApLA0KICBzaW5fZXJyID0gYyAoMjAsIDIwKSwNCiAgY29zX2VyciA9IGMoMSwgMSkNCikNCg0KDQojINCe0YLRgNC40YHQvtCy0LrQsCDRgNGP0LTQsCBmX24NCnBsb3QoZl9uLCB0eXBlID0gImwiLCBsd2QgPSAzLCBjb2wgPSAncmVkJywgeWxpbSA9IGMoLTEwLCAxMCksDQogICAgIHhsYWIgPSAi0JLRgNC10LzRjyIsIHlsYWIgPSAi0JfQvdCw0YfQtdC90LjRjyDRgNGP0LTQsCIsIG1haW4gPSAi0KDQsNC30LvQvtC20LXQvdC40LUg0LLRgNC10LzQtdC90L3QvtCz0L4g0YDRj9C00LAiKQ0KDQojINCU0L7QsdCw0LLQu9C10L3QuNC1INC+0YLQtNC10LvRjNC90YvRhSDQutC+0LzQv9C+0L3QtdC90YLQvtCyIChmX0MsIGZfYywgZl9lKQ0KbGluZXMoZl9jLCBjb2wgPSAiYmx1ZSIpICAjINCa0L7QvNC/0L7QvdC10L3RgiBmX2MNCmxpbmVzKGZfZSwgY29sID0gImJsdWUiKSAgIyDQmtC+0LzQv9C+0L3QtdC90YIgZl9lDQpsaW5lcyhmX3MsIGNvbCA9ICJibHVlIikNCg0KIyDQm9C10LPQtdC90LTQsA0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygi0JLQtdGB0Ywg0YDRj9C0IiwgItCa0L7QvNC/0L7QvdC10L3RgtGLIiksIA0KICAgICAgIGNvbCA9IGMoInJlZCIsICJibHVlIiksIGx0eSA9IDEsIGx3ZCA9IDMpDQoNCg0KDQoNCg0KDQoNCg0KYyA8LSBjaXJjdWxhbnRfU1NBKGZfbiwgTCA9IEwsIGV4dGVuZF9mbGFnID0gVFJVRSkNCiMgciA8LSBjJHRfc2VyaWVzDQpyIDwtIGdyb3VwaW5nX2Npc3NhKGMsDQogICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IGxpc3QoDQogICAgICAgICAgICAgICAgICAgICAgdHJlbmQgPSBjKDAsIDEvMjYtZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsX2NvcyA9IGMoMS8xNCwgMS8xMCksDQogICAgICAgICAgICAgICAgICAgICAgc2Vzb25hbF9zaW4gPSBjKDEvMjYsIDEvMjMpDQogICAgICAgICAgICAgICAgICAgICkpDQoNCmRhdGEkY29zX2VyclsyXSA8LSBtc2UoZl9zLCByJHNlc29uYWxfc2luKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCmRhdGEkc2luX2VyclsyXSA8LSBtc2UoZl9jLCByJHNlc29uYWxfY29zKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCmRhdGEkZXhwX2VyclsyXSA8LSBtc2UoZl9lLCByJHRyZW5kKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCg0KDQojIHBuZygiQzovVXNlcnMvbmlrMW0vRGVza3RvcC/Rg9C90LjQui82INGB0LXQvC/QutGD0YDRgdCw0Ycv0KLQtdC60YHRgiDRgNCw0LHQvtGC0YsvaW1nL3RyZW5kIGluc2VwYXJhYmlsaXR5L0NpU1NBLnBuZyIpICAjINGB0L7RhdGA0LDQvdC10L3QuNC1INCyINGE0L7RgNC80LDRgtC1IFBORw0KDQpwbG90KDE6biwgZl9uLCB0eXBlID0gImwiLCBsd2Q9MywgeWxpbT0gYygtMTAsIDEwKSwgY29sPSJyZWQiLA0KICAgICB4bGFiID0gItCS0YDQtdC80Y8iLCB5bGFiID0gItCX0L3QsNGH0LXQvdC40Y8g0YDRj9C00LAiLCBtYWluID0gIkNpU1NBINGA0LDQt9C70L7QttC10L3QuNC1INCy0YDQtdC80LXQvdC90L7Qs9C+INGA0Y/QtNCwIikNCmxpbmVzKDE6biwgciR0cmVuZCwgY29sID0gImJsdWUiKQ0KbGluZXMoMTpuLCByJHNlc29uYWxfc2luLCBjb2wgPSAiYmx1ZSIpDQpsaW5lcygxOm4sIHIkc2Vzb25hbF9jb3MsIGNvbCA9ICJibHVlIikNCg0KIyDQm9C10LPQtdC90LTQsA0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygi0JLQtdGB0Ywg0YDRj9C0IiwgItCa0L7QvNC/0L7QvdC10L3RgtGLIiksIA0KICAgICAgIGNvbCA9IGMoInJlZCIsICJibHVlIiksIGx0eSA9IDEsIGx3ZCA9IDMpDQoNCiMgZGV2Lm9mZigpICAjINC30LDQstC10YDRiNC10L3QuNC1INGB0L7RhdGA0LDQvdC10L3QuNGPDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnMgPC0gc3NhKGZfbiwgTCkNCmUgPC0gZW9zc2FfbmV3KHMsIG5lc3RlZC5ncm91cHMgPSBsaXN0KDE6MzApLCBjbHVzdF90eXBlID0gImRpc3RhbmNlIikNCg0KZ19zZXNvbmFsIDwtIGdyb3VwaW5nLmF1dG8oZSwgYmFzZSA9ICJlaWdlbiIsDQogICAgICAgICAgICAgICAgICAgZnJlcS5iaW5zID0gbGlzdCh0cmVuZCA9IGMoMS8yNS1lcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzb25hbDIgPSBjKDEvMjUsIDEvMjMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzb25hbDEgPSBjKDEvMTMsIDEvMTEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDAuMSkNCg0KDQpyIDwtIHJlY29uc3RydWN0KGUsIGdyb3Vwcz0gZ19zZXNvbmFsKQ0KDQpwbG90KHdjb3IoZSwgZ3JvdXBzID0gMToyNCksIHNjYWxlcyA9IGxpc3QoYXQgPSBjKDEwLCAyMCwgMzApKSkNCg0KZGF0YSRleHBfZXJyWzFdIDwtIG1zZShmX2UsIHIkdHJlbmQpICB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCmRhdGEkY29zX2VyclsxXSA8LSBtc2UoZl9jLCByJHNlc29uYWwxKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCmRhdGEkc2luX2VyclsxXSA8LSBtc2UoZl9zLCByJHNlc29uYWwyKSB8PiBmb3JtYXRDKGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMSkNCg0KDQojIHBuZygiQzovVXNlcnMvbmlrMW0vRGVza3RvcC/Rg9C90LjQui82INGB0LXQvC/QutGD0YDRgdCw0Ycv0KLQtdC60YHRgiDRgNCw0LHQvtGC0YsvaW1nL3RyZW5kIGluc2VwYXJhYmlsaXR5L1NTQS5wbmciKSAgIyDRgdC+0YXRgNCw0L3QtdC90LjQtSDQsiDRhNC+0YDQvNCw0YLQtSBQTkcNCg0KcGxvdCgxOm4sIGZfbiwgdHlwZSA9ICJsIiwgbHdkPTMsIHlsaW09IGMoLTEwLCAxMCksIGNvbD0icmVkIiwNCiAgICAgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNGPINGA0Y/QtNCwIiwgbWFpbiA9ICJTU0Eg0YDQsNC30LvQvtC20LXQvdC40LUg0LLRgNC10LzQtdC90L3QvtCz0L4g0YDRj9C00LAiKQ0KDQpsaW5lcygxOm4sIHIkdHJlbmQsIHR5cGUgPSAibCIsIGNvbD0iYmx1ZSIpDQpsaW5lcygxOm4sIHIkc2Vzb25hbDEsIGNvbCA9ICJibHVlIikNCmxpbmVzKDE6biwgciRzZXNvbmFsMiwgY29sID0gImJsdWUiKQ0KDQojINCb0LXQs9C10L3QtNCwDQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKCLQktC10YHRjCDRgNGP0LQiLCAi0JrQvtC80L/QvtC90LXQvdGC0YsiKSwgDQogICAgICAgY29sID0gYygicmVkIiwgImJsdWUiKSwgbHR5ID0gMSwgbHdkID0gMykNCg0KDQoNCg0KDQoNCg0KIyDQqNCw0LMgMzog0J/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDQtNCw0L3QvdGL0YUg0LIg0YTQvtGA0LzQsNGCIExhVGVYDQp0YWJsZV9sYXRleCA8LSB4dGFibGUoZGF0YSwgY2FwdGlvbiA9ICJFeGFtcGxlIFRhYmxlIikNCg0KIyDQqNCw0LMgNDog0JLRi9Cy0L7QtCDRgtCw0LHQu9C40YbRiyDQsiBMYVRlWCDRhNCw0LnQuw0KcHJpbnQodGFibGVfbGF0ZXgsIGluY2x1ZGUucm93bmFtZXMgPSBGQUxTRSkNCg0KDQpgYGANCg0KIyMg0JTQsNC90L3Ri9C1IElQDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpkYXRhIDwtIHJlYWRfZXhjZWwoIkRhdGEvSW50ZXJuYXRpb25hbF9GaW5hbmNpYWxfU3RhdGlzdGljc18ueGxzeCIpDQpkYXRhIHw+IGhlYWQoKQ0KYGBgDQoNCtCe0YLRgNC40YHQvtCy0LrQsCDQtNCw0L3QvdGL0YUgSVANCg0KYGBge3J9DQpkYXRlcyA8LSBzZXEoYXMuRGF0ZSgiMTk3MC0wMS0wMSIpLCBhcy5EYXRlKCIyMDE4LTEtMzAiKSwgYnkgPSAibW9udGgiKQ0KSVBfdmFsdWVzIDwtIGRhdGFbMiwgLWMoMSwgMildIHw+IGFzLmRvdWJsZSgpIA0KcGxvdChkYXRlcywgSVBfdmFsdWVzLCB0eXBlPSJsIikNCmBgYA0KDQojIyMjIENpc3NhDQoNCtCe0YLRgNC40YHQvtCy0LrQsCDRgtGA0LXQvdC00L7QstC+0Lkg0YHQvtGB0YLQsNCy0LvRj9GO0YnQtdC5INGH0ZHRgNC90YvQvCDRhtCy0LXRgtC+0LwsINC+0YHQvdC+0LLQvdC+0Lkg0LLRgNC10LzQtdC90L3QvtC5INGA0Y/QtCDigJQg0LrRgNCw0YHQvdGL0LwNCg0KYGBge3J9DQpkYXRhX3NsaWNlIDwtIDE6NTM3DQpkYXRlc19zbGljZSA8LSBkYXRlc1tkYXRhX3NsaWNlXQ0KSVBfdmFsdWVzX3NsaWNlIDwtIElQX3ZhbHVlc1tkYXRhX3NsaWNlXQ0KZXBzIDwtIDEvMTkzDQoNCmMgPC0gY2lyY3VsYW50X1NTQShJUF92YWx1ZXNfc2xpY2UsIEwgPSAxOTIsIGV4dGVuZF9mbGFnID0gVFJVRSkNCnIgPC0gYyR0X3Nlcmllcw0KciA8LSBncm91cGluZ19jaXNzYShjLA0KICAgICAgICAgICAgICAgICAgICBncm91cHMgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICAgIHRyZW5kID0gYygwLCAxLzE5MiksDQogICAgICAgICAgICAgICAgICAgICAgY3ljbGUgPSBjKDEvOTcsIDUvOTUpLA0KICAgICAgICAgICAgICAgICAgICAgIHNlc29uYWwgPSBjKDEvMTMsIDEvMiswLjAwMDEpDQogICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgKQ0Kcl9zZXNvbmFsIDwtICBncm91cGluZ19jaXNzYShjLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBjKDE2LzE5MiAtIGVwcywgMTYvMTkyICsgZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gYygzMi8xOTIgLSBlcHMsIDMyLzE5MiArIGVwcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IGMoNDgvMTkyIC0gZXBzLCA0OC8xOTIgKyBlcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczQgPSBjKDY0LzE5MiAtIGVwcywgNjQvMTkyICsgZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1ID0gYyg4MC8xOTIgLSBlcHMsIDgwLzE5MiArIGVwcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IGMoOTYvMTkyIC0gZXBzLCA5Ni8xOTIgKyBlcHMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KIyBjaXNzYV90cmVuZCA8LSByWywxXSArIHJbLDJdDQojIGNpc3NhX2N5Y2xlIDwtIHJbLCAzOjExXSB8PiByb3dTdW1zKCkNCiMgY2lzc2Ffc2Vzb25hbCA8LSByWywgYygxNywgMzMsIDQ5LCA2NSwgODEsIDk3KV0gfD4gcm93U3VtcygpDQojIGNpc3NhX3Jlc2lkdWFscyA8LSBJUF92YWx1ZXNfc2xpY2UgLSAoY2lzc2FfdHJlbmQgKyBjaXNzYV9jeWNsZSArIGNpc3NhX3Nlc29uYWwpDQoNCmNpc3NhX3RyZW5kIDwtIHIkdHJlbmQNCmNpc3NhX2N5Y2xlIDwtIHIkY3ljbGUNCmNpc3NhX3Nlc29uYWwgPC0gUmVkdWNlKCIrIiwgcl9zZXNvbmFsIHw+IHdpdGhpbihybShyZXNpZHVhbHMpKSkNCmNpc3NhX3Jlc2lkdWFscyA8LSBJUF92YWx1ZXNfc2xpY2UgLSAoY2lzc2FfdHJlbmQgKyBjaXNzYV9jeWNsZSArIGNpc3NhX3Nlc29uYWwpDQoNCg0KcGxvdChkYXRlc19zbGljZSwgSVBfdmFsdWVzX3NsaWNlLA0KICAgICB0eXBlPSJsIiwgY29sID0gImJsYWNrIikNCmxpbmVzKGRhdGVzX3NsaWNlLCBjaXNzYV90cmVuZCwNCiAgICAgIHR5cGU9ImwiLCBjb2wgPSAicmVkIikNCg0KcGxvdChkYXRlc19zbGljZSwgY2lzc2FfY3ljbGUsDQogICAgIHR5cGU9ImwiLCBjb2wgPSAicmVkIikNCg0KcGxvdChkYXRlc19zbGljZSwgY2lzc2Ffc2Vzb25hbCwNCiAgICAgdHlwZT0ibCIsIGNvbCA9ICJyZWQiKQ0KDQpwbG90KGRhdGVzX3NsaWNlLCBjaXNzYV9yZXNpZHVhbHMsDQogICAgIHR5cGU9ImwiLCBjb2wgPSAicmVkIikNCg0KcGxvdChkYXRlc19zbGljZSwgSVBfdmFsdWVzX3NsaWNlLA0KICAgICB0eXBlPSJsIiwgY29sID0gImJsYWNrIikNCmxpbmVzKGRhdGVzX3NsaWNlLCBjaXNzYV90cmVuZCtjaXNzYV9jeWNsZStjaXNzYV9zZXNvbmFsLA0KICAgICAgdHlwZT0ibCIsIGNvbCA9ICJyZWQiKQ0KYGBgDQoNCiMjIyMgU1NBIGZvc3NhDQoNCmBgYHtyfQ0KcyA8LSBzc2EoSVBfdmFsdWVzX3NsaWNlLCBMID0gMTkyKQ0KZSA8LSBmb3NzYShzKQ0KIyBlIDwtIGVvc3NhX25ldyhzLCBuZXN0ZWQuZ3JvdXBzID0gbGlzdCgxOjMwKSwgY2x1c3RfdHlwZSA9ICJkaXN0YW5jZSIpDQplcHMgPC0gMS8xOTMNCg0KZ3JvdXBzIDwtIGdyb3VwaW5nLmF1dG8oZSwNCiAgICAgICAgICAgICAgICAgICBmcmVxLmJpbnMgPSBsaXN0KHRyZW5kID0gYygxLzE5MiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZSA9IGMoMS85NywgNS85NSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IGMoMTYvMTkyIC0gZXBzLCAxNi8xOTIgKyBlcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBjKDMyLzE5MiAtIGVwcywgMzIvMTkyICsgZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gYyg0OC8xOTIgLSBlcHMsIDQ4LzE5MiArIGVwcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNCA9IGMoNjQvMTkyIC0gZXBzLCA2NC8xOTIgKyBlcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczUgPSBjKDgwLzE5MiAtIGVwcywgODAvMTkyICsgZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gYyg5Ni8xOTIgLSBlcHMsIDk2LzE5MiArIGVwcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gMCkNCg0KDQpwbG90KHdjb3IoZSwgZ3JvdXBzID0gMTozMCksIHNjYWxlcyA9IGxpc3QoYXQgPSBjKDEwLCAyMCwgMzApKSwNCiAgICAgbWFpbiA9ICJXLWNvcnJlbGF0aW9uIG1hdHJpeCBTU0EgKGZvc3NhKSIpDQoNCnIgPC0gcmVjb25zdHJ1Y3QoZSwgZ3JvdXBzPWdyb3VwcykNCg0Kc3NhX3RyZW5kX2YgPC0gciR0cmVuZA0Kc3NhX2N5Y2xlX2YgPC0gciRjeWNsZQ0Kc3NhX3Nlc29uYWxfZiA8LSByJHMxICsgciRzMiArIHIkczMgKyByJHM0ICsgciRzNSArIHIkczYNCnNzYV9yZXNpZHVhbHNfZiA8LSBJUF92YWx1ZXNfc2xpY2UgLSAoc3NhX3RyZW5kX2YgKyBzc2FfY3ljbGVfZiArIHNzYV9zZXNvbmFsX2YpDQoNCnBsb3QoZGF0ZXNfc2xpY2UsIElQX3ZhbHVlc19zbGljZSwNCiAgICAgdHlwZT0ibCIsIGNvbCA9ICJibGFjayIpDQpsaW5lcyhkYXRlc19zbGljZSwgc3NhX3RyZW5kX2YsDQogICAgICB0eXBlPSJsIiwgY29sID0gIm1hZ2VudGEiKQ0KDQpwbG90KGRhdGVzX3NsaWNlLCBzc2FfY3ljbGVfZiwgDQogICAgIHR5cGU9ImwiLCBjb2wgPSAibWFnZW50YSIpDQoNCnBsb3QoZGF0ZXNfc2xpY2UsIHNzYV9zZXNvbmFsX2YsIA0KICAgICB0eXBlPSJsIiwgY29sID0gIm1hZ2VudGEiKQ0KDQpwbG90KGRhdGVzX3NsaWNlLCBzc2FfcmVzaWR1YWxzX2YsDQogICAgIHR5cGU9ImwiLCBjb2wgPSAibWFnZW50YSIpDQoNCmBgYA0KDQojIyMjIFNTQSBlb3NzYQ0KDQpgYGB7cn0NCmxpYnJhcnkoUnNzYSkNCnNvdXJjZSgiZW9zc2FfbmV3LnIiKQ0KcyA8LSBzc2EoSVBfdmFsdWVzX3NsaWNlLCBMID0gMTkyKQ0KZSA8LSBlb3NzYV9uZXcocywgbmVzdGVkLmdyb3VwcyA9IGxpc3QoMTozMCksIGNsdXN0X3R5cGUgPSAiZGlzdGFuY2UiKQ0KDQoNCg0KDQpncm91cHMgPC0gZ3JvdXBpbmcuYXV0byhlLA0KICAgICAgICAgICAgICAgICAgIGZyZXEuYmlucyA9IGxpc3QodHJlbmQgPSBjKDEvMTkyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlID0gYygxLzk3LCA1Lzk1KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gYygxNi8xOTIgLSBlcHMsIDE2LzE5MiArIGVwcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IGMoMzIvMTkyIC0gZXBzLCAzMi8xOTIgKyBlcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBjKDQ4LzE5MiAtIGVwcywgNDgvMTkyICsgZXBzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0ID0gYyg2NC8xOTIgLSBlcHMsIDY0LzE5MiArIGVwcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNSA9IGMoODAvMTkyIC0gZXBzLCA4MC8xOTIgKyBlcHMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczYgPSBjKDk2LzE5MiAtIGVwcywgOTYvMTkyICsgZXBzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAwKQ0KcGxvdCh3Y29yKGUsIGdyb3VwcyA9IDE6MzApLCBzY2FsZXMgPSBsaXN0KGF0ID0gYygxMCwgMjAsIDMwKSksDQogICAgIG1haW4gPSAiVy1jb3JyZWxhdGlvbiBtYXRyaXggU1NBIChlb3NzYSkiKQ0KDQpyIDwtIHJlY29uc3RydWN0KGUsIGdyb3Vwcz1ncm91cHMpDQoNCnNzYV90cmVuZCA8LSByJHRyZW5kDQpzc2FfY3ljbGUgPC0gciRjeWNsZQ0Kc3NhX3Nlc29uYWwgPC0gciRzMSArIHIkczIgKyByJHMzICsgciRzNCArIHIkczUgKyByJHM2DQpzc2FfcmVzaWR1YWxzIDwtIElQX3ZhbHVlc19zbGljZSAtIChzc2FfdHJlbmQgKyBzc2FfY3ljbGUgKyBzc2Ffc2Vzb25hbCkNCg0KcGxvdChkYXRlc19zbGljZSwgSVBfdmFsdWVzX3NsaWNlLA0KICAgICB0eXBlPSJsIiwgY29sID0gImJsYWNrIikNCmxpbmVzKGRhdGVzX3NsaWNlLCBzc2FfdHJlbmQsDQogICAgICB0eXBlPSJsIiwgY29sID0gImJsdWUiKQ0KDQpwbG90KGRhdGVzX3NsaWNlLCBzc2FfY3ljbGUsIA0KICAgICB0eXBlPSJsIiwgY29sID0gImJsdWUiKQ0KDQpwbG90KGRhdGVzX3NsaWNlLCBzc2Ffc2Vzb25hbCwgDQogICAgIHR5cGU9ImwiLCBjb2wgPSAiYmx1ZSIpDQoNCnBsb3QoZGF0ZXNfc2xpY2UsIHNzYV9yZXNpZHVhbHMsDQogICAgIHR5cGU9ImwiLCBjb2wgPSAiYmx1ZSIpDQpgYGANCg0KYGBge3J9DQpwbG90KGRhdGVzX3NsaWNlLCBJUF92YWx1ZXNfc2xpY2UsDQogICAgIG1haW4gPSAiSVAgVVNBINGC0YDQtdC90LQiLHhsYWIgPSAi0JLRgNC10LzRjyIsIHlsYWIgPSAi0JfQvdCw0YfQtdC90LjQtSIsDQogICAgIHR5cGU9ImwiLCBjb2wgPSAiYmxhY2siKQ0KbGluZXMoZGF0ZXNfc2xpY2UsIHNzYV90cmVuZCwNCiAgICAgIHR5cGU9ImwiLCBjb2wgPSAiYmx1ZSIsIGx3ZD0yKQ0KbGluZXMoZGF0ZXNfc2xpY2UsIHNzYV90cmVuZF9mLA0KICAgICAgdHlwZT0ibCIsIGNvbCA9ICJtYWdlbnRhIiwgbHdkPTIpDQpsaW5lcyhkYXRlc19zbGljZSwgY2lzc2FfdHJlbmQsDQogICAgICB0eXBlPSJsIiwgY29sID0gInJlZCIsIGx3ZD0yKQ0KIyDQm9C10LPQtdC90LTQsA0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygi0JLQtdGB0Ywg0YDRj9C0IiwgIkNpU1NBINGC0YDQtdC90LQiLCAiU1NBINGC0YDQtdC90LQgKGVvc3NhKSIsICJTU0Eg0YLRgNC10L3QtCAoZm9zc2EpIiksIA0KICAgICAgIGNvbCA9IGMoImJsYWNrIiwgInJlZCIsICJibHVlIiwgIm1hZ2VudGEiKSwgbHR5ID0gMSwgbHdkID0gMykNCg0KDQpwbG90KGRhdGVzX3NsaWNlLCBzc2FfY3ljbGUsDQogICAgIG1haW4gPSAiSVAgVVNBINGG0LjQutC70LjRh9C90L7RgdGC0YwiLCB4bGFiID0gItCS0YDQtdC80Y8iLCB5bGFiID0gItCX0L3QsNGH0LXQvdC40LUiLA0KICAgICB0eXBlPSJsIiwgY29sID0gImJsdWUiLCB5bGltPWMoLTEwLCAxMCksIGx3ZD0yKQ0KbGluZXMoZGF0ZXNfc2xpY2UsIGNpc3NhX2N5Y2xlLA0KICAgICAgdHlwZT0ibCIsIGNvbCA9ICJyZWQiLCBsd2Q9MikNCmxpbmVzKGRhdGVzX3NsaWNlLCBzc2FfY3ljbGVfZiwNCiAgICAgIHR5cGU9ImwiLCBjb2wgPSAibWFnZW50YSIsIGx3ZD0yKQ0KIyDQm9C10LPQtdC90LTQsA0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQ2lTU0EiLCAiU1NBIChlb3NzYSkiLCAiU1NBIChmb3NzYSkiKSwgDQogICAgICAgY29sID0gYygicmVkIiwgImJsdWUiLCAibWFnZW50YSIpLCBsdHkgPSAxLCBsd2QgPSAzKQ0KDQpgYGANCg0KYGBge3J9DQojINCd0LDRgdGC0YDQvtC50LrQsCDQs9GA0LDRhNC40LrQvtCyINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC00LLRg9GFINCz0YDQsNGE0LjQutC+0LIg0L7QtNC40L0g0L/QvtC0INC00YDRg9Cz0LjQvCDRgSDQvtCx0YnQtdC5INC+0YHRjNGOIFgNCmxheW91dChtYXRyaXgoYygxLCAyKSwgbnJvdyA9IDIsIGJ5cm93ID0gVFJVRSksIGhlaWdodHMgPSBjKDEsIDEuMikpDQoNCiMg0J/QvtGB0YLRgNC+0LXQvdC40LUg0L/QtdGA0LLQvtCz0L4g0LPRgNCw0YTQuNC60LANCnBhcihtYXIgPSBjKDIsIDQsIDIsIDIpKSAjINCj0LzQtdC90YzRiNC10L3QuNC1INC90LjQttC90LXQs9C+INC+0YLRgdGC0YPQv9CwDQpwbG90KGRhdGVzX3NsaWNlLCBzc2Ffc2Vzb25hbCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBsd2QgPSAxLA0KICAgICBtYWluID0gIlNTQSAoZW9zc2EpINGB0LXQt9C+0L3QvdC+0YHRgtGMIiwgeGxhYiA9ICIiLCB5bGFiID0gItCX0L3QsNGH0LXQvdC40LUiKQ0KIyDQlNC+0LHQsNCy0LvQtdC90LjQtSDQvtGB0LggWCDQstC90LjQt9GDINC/0LXRgNCy0L7Qs9C+INCz0YDQsNGE0LjQutCwLCDQvdC+INGBINC/0YPRgdGC0YvQvNC4INC80LXRgtC60LDQvNC4DQpheGlzKDEsIGxhYmVscyA9IEZBTFNFKQ0KDQojINCf0L7RgdGC0YDQvtC10L3QuNC1INCy0YLQvtGA0L7Qs9C+INCz0YDQsNGE0LjQutCwDQpwYXIobWFyID0gYyg1LCA0LCAyLCAyKSkgIyDQo9Cy0LXQu9C40YfQtdC90LjQtSDQvdC40LbQvdC10LPQviDQvtGC0YHRgtGD0L/QsA0KcGxvdChkYXRlc19zbGljZSwgc3NhX3Nlc29uYWxfZiwgdHlwZSA9ICJsIiwgY29sID0gIm1hZ2VudGEiLCBsd2QgPSAxLA0KICAgICBtYWluID0gIlNTQSAoZm9zc2EpINGB0LXQt9C+0L3QvdC+0YHRgtGMIiwgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNC1IikNCg0KcGFyKG1hciA9IGMoMywgNCwgMiwgMikpICMg0KPQstC10LvQuNGH0LXQvdC40LUg0L3QuNC20L3QtdCz0L4g0L7RgtGB0YLRg9C/0LANCnBsb3QoZGF0ZXNfc2xpY2UsIGNpc3NhX3Nlc29uYWwsIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiLCBsd2QgPSAxLA0KICAgICBtYWluID0gIkNpU1NBINGB0LXQt9C+0L3QvdC+0YHRgtGMIiwgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNC1IikNCg0KIyDQktC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC1INC80LDQutC10YLQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjg0KbGF5b3V0KDEpDQoNCg0KYGBgDQoNCmBgYHtyfQ0KcGxvdChkYXRlc19zbGljZSwgc3NhX3Jlc2lkdWFscywgDQogICAgIG1haW4gPSAiSVAgVVNBINC+0YHRgtCw0YLQvtC6IiwgeGxhYiA9ICLQktGA0LXQvNGPIiwgeWxhYiA9ICLQl9C90LDRh9C10L3QuNC1IiwNCiAgICAgdHlwZT0ibCIsIGNvbCA9ICJibHVlIiwgeWxpbT1jKC0yLCAyKSkNCmxpbmVzKGRhdGVzX3NsaWNlLCBjaXNzYV9yZXNpZHVhbHMsDQogICAgICB0eXBlPSJsIiwgY29sID0gInJlZCIpDQpsaW5lcyhkYXRlc19zbGljZSwgc3NhX3Jlc2lkdWFsc19mLA0KICAgICAgdHlwZT0ibCIsIGNvbCA9ICJtYWdlbnRhIikNCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoIkNpU1NBIiwgIlNTQSAoZW9zc2EpIiwgIlNTQSAoZm9zc2EpIiksIA0KICAgICAgIGNvbCA9IGMoInJlZCIsICJibHVlIiwgIm1hZ2VudGEiKSwgbHR5ID0gMSwgbHdkID0gMykNCmBgYA0KDQpgYGB7cn0NCnNzYV9yZXNpZHVhbHMgfD4gZGVuc2l0eSgpIHw+IHBsb3QoKQ0KY2lzc2FfcmVzaWR1YWxzIHw+IGRlbnNpdHkoKSB8PiBwbG90KCkNCmBgYA0KDQojIyMg0J7RgtC00LXQu9C10L3QuNC1INGB0LjQs9C90LDQu9CwINC+0YIg0YjRg9C80LANCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQoNCm5fbXNlX3Rlc3RzIDwtIGZ1bmN0aW9uKG4pew0KICBuIDwtIDk2KjItMQ0KICBMIDwtIDk2DQogIHNpZ21hIDwtIDAuMQ0KICANCiAgDQogIEMgPC0gMQ0KICBvbWVnYV9jcyA8LSAxLzEyDQogIG9tZWdhX3NuIDwtIDEvMjQNCiAgYSA8LSAxLzEwMA0KICBmX3N1bSA8LSBmdW5jdGlvbih4KXsNCiAgICBmX2NvbnN0KHgsIEMgPSBDKSArDQogICAgICBmX2Nvcyh4LCBvbWVnYSA9IG9tZWdhX2NzKSArDQogICAgICBmX2V4cCh4LCBhID0gYSkgKw0KICAgICAgZl9zaW4oeCwgb21lZ2EgPSBvbWVnYV9zbikNCiAgfQ0KICANCiAgDQogIGZfQyA8LSBmX2NvbnN0IHw+IGdlbmVyYXRlX3RzKG4sIEMgPSBDKQ0KICBmX2MgPC0gZl9jb3MgfD4gZ2VuZXJhdGVfdHMobiwgb21lZ2EgPSBvbWVnYV9jcykNCiAgZl9zIDwtIGZfc2luIHw+IGdlbmVyYXRlX3RzKG4sIG9tZWdhID0gb21lZ2Ffc24pDQogIGZfZSA8LSBmX2V4cCB8PiBnZW5lcmF0ZV90cyhuLCBhID0gYSkNCiAgDQogIG1zZV9sc3QgPC0gbGlzdCgpDQogIGZvciAoaSBpbiAxOm4pIHsNCiAgICBmX25vaXNlIDwtIHJub3JtKG4sIHNkID0gc2lnbWEpDQogICAgDQogICAgZl9uIDwtIGZfc3VtKDE6bikgKyBmX25vaXNlDQogICAgDQogICAgDQogICAgDQogICAgYyA8LSBjaXJjdWxhbnRfU1NBKGZfbiwgTCA9IEwsIGV4dGVuZF9mbGFnID0gVFJVRSkNCiAgICAjIHIgPC0gYyR0X3Nlcmllcw0KICAgIHIgPC0gZ3JvdXBpbmdfY2lzc2EoYywgZ3JvdXBzPSBsaXN0KHRyZW5kID0gYygwLCAxLzEwMDApLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsMiA9IGMoMS8yNSwgMS8yMyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzb25hbDEgPSBjKDEvMTMsIDEvMTApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCiAgICANCiAgICAjIG1zZV9sc3QkY2lzc2EgPC0gYyhtc2VfbHN0JGNpc3NhLCBtc2UoZl9zdW0oMTpuKSwgclssIDldICsgclssIDVdICsgclssIDFdKSkgDQogICAgbXNlX2xzdCRjaXNzYSA8LSBjKG1zZV9sc3QkY2lzc2EsDQogICAgICAgICAgICAgICAgICAgICAgIG1zZShmX3N1bSgxOm4pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgciR0cmVuZCArIHIkc2Vzb25hbDEgKyByJHNlc29uYWwyKSkgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgcyA8LSBzc2EoZl9uLCBMKQ0KICAgICMgZSA8LSBlb3NzYShzLCAxOjEwLCBrID0gNikNCiAgICBlIDwtIGZvc3NhKHMpDQogICAgDQogICAgZ19zZXNvbmFsIDwtIGdyb3VwaW5nLmF1dG8oZSwgYmFzZSA9ICJlaWdlbiIsDQogICAgICAgICAgICAgICAgICAgICAgIGZyZXEuYmlucyA9IGxpc3QodHJlbmQgPSAxLzEwMDAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc29uYWwyID0gYygxLzI1LCAxLzIzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNvbmFsMSA9IGMoMS8xMywgMS8xMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAwLjUpDQogICAgDQogICAgciA8LSByZWNvbnN0cnVjdChlLCBncm91cHM9YyhsaXN0KGV4cCA9IDEsIEMgPSAyKSwgZ19zZXNvbmFsKSkNCiAgICANCiAgICBtc2VfbHN0JHNzYSA8LSANCiAgICAgIGMobXNlX2xzdCRzc2EsIG1zZShmX3N1bSgxOm4pLCByJHRyZW5kICsgciRzZXNvbmFsMiArIHIkc2Vzb25hbDEpKQ0KIA0KICB9DQogIHJldHVybihtc2VfbHN0KQ0KfQ0KDQpyZXNfbXNlX3Rlc3QgPC0gbl9tc2VfdGVzdHMoMTAwMDApDQoNCmBgYA0KDQpgYGB7cn0NCiMg0J7RhtC10L3QutCwINC/0LvQvtGC0L3QvtGB0YLQuA0KZGVuc2l0eV9lc3RpbWF0ZV9jaXNzYSA8LSBkZW5zaXR5KHJlc19tc2VfdGVzdCRjaXNzYSkNCg0KIyDQn9C+0YHRgtGA0L7QtdC90LjQtSDQs9GA0LDRhNC40LrQsCDQv9C70L7RgtC90L7RgdGC0LgNCnBsb3QoZGVuc2l0eV9lc3RpbWF0ZV9jaXNzYSwgbWFpbiA9ICLQntGG0LXQvdC60LAg0L/Qu9C+0YLQvdC+0YHRgtC4IiwgDQogICAgIHhsYWIgPSAi0JfQvdCw0YfQtdC90LjQtSIsIHlsYWIgPSAi0J/Qu9C+0YLQvdC+0YHRgtGMIiwgDQogICAgIGNvbCA9ICJibHVlIiwgbHdkID0gMikNCg0KZGVuc2l0eV9lc3RpbWF0ZV9zc2EgPC0gZGVuc2l0eShyZXNfbXNlX3Rlc3Qkc3NhKQ0KDQojINCf0L7RgdGC0YDQvtC10L3QuNC1INCz0YDQsNGE0LjQutCwINC/0LvQvtGC0L3QvtGB0YLQuA0KcGxvdChkZW5zaXR5X2VzdGltYXRlX3NzYSwgbWFpbiA9ICLQntGG0LXQvdC60LAg0L/Qu9C+0YLQvdC+0YHRgtC4IiwgDQogICAgIHhsYWIgPSAi0JfQvdCw0YfQtdC90LjQtSIsIHlsYWIgPSAi0J/Qu9C+0YLQvdC+0YHRgtGMIiwgDQogICAgIGNvbCA9ICJibHVlIiwgbHdkID0gMikNCg0KcmVzX21zZV90ZXN0JGNpc3NhIHw+IHN1bW1hcnkoKQ0KcmVzX21zZV90ZXN0JGNpc3NhIHw+IHNkKCkNCnJlc19tc2VfdGVzdCRzc2EgfD4gc3VtbWFyeSgpDQpyZXNfbXNlX3Rlc3Qkc3NhIHw+IHNkKCkNCmBgYA0KDQojIyMg0JrQsNC6INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0YDQsNGB0YjQuNGA0LXQvdC40LUg0YDRj9C00LANCg0KYGBge3J9DQpJUF92YWx1ZXNfc2xpY2UgfD4gZXh0ZW5kKDE5MikgfD4gcGxvdCh0eXBlPSJsIiwgbHdkID0gMykNCmMocmVwKDAsIDE5MiksSVBfdmFsdWVzX3NsaWNlKSB8PiBsaW5lcyh0eXBlPSJsIiwgY29sPSJyZWQiKQ0KDQpgYGANCg0KIyMjINCk0YPRgNGM0LUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtQ0KDQpgYGB7cn0NCm4gPC0gOTYqMg0KTCA8LSA5Ng0KDQp4IDwtIDA6KG4tMSkNCnkxIDwtIGNvcygyICogcGkgLyAxMiAqIHgpICAjINCf0LXRgNCy0LDRjyDQutC+0LzQv9C+0L3QtdC90YLQsA0KeTIgPC0gc2luKDIgKiBwaSAvIDQ4ICogeCkgICMg0JLRgtC+0YDQsNGPINC60L7QvNC/0L7QvdC10L3RgtCwDQoNCiMg0KHQvtC30LTQsNC10Lwg0L7QsdGJ0LjQuSDQstGA0LXQvNC10L3QvdC+0Lkg0YDRj9C0DQp5IDwtIHkxICsgeTINCg0KIyDQktGL0L/QvtC70L3Rj9C10Lwg0LHRi9GB0YLRgNC+0LUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDQpNGD0YDRjNC1DQpmZnRfeSA8LSBmZnQoeSkNCg0KIyDQn9C+0LvRg9GH0LDQtdC8INCw0LzQv9C70LjRgtGD0LTRiyDQuCDRhNCw0LfRiw0KYW1wbGl0dWRlcyA8LSBNb2QoZmZ0X3kpDQpwaGFzZXMgPC0gQXJnKGZmdF95KQ0KDQojINCY0L3QtNC10LrRgdGLINC00LvRjyDRh9Cw0YHRgtC+0YINCm4gPC0gbGVuZ3RoKHkpDQpmcmVxdWVuY2llcyA8LSAoMDoobi0xKSkgLyBuDQoNCiMg0KTRg9C90LrRhtC40Y8g0LTQu9GPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGCDQpyZWNvbnN0cnVjdF9mZnQgPC0gZnVuY3Rpb24oZnJlcXVlbmNpZXMsIGFtcGxpdHVkZXMsIHBoYXNlcykgew0KICByZWNvbnN0cnVjdGVkIDwtIGxpc3QoKQ0KICBuIDwtIGxlbmd0aChhbXBsaXR1ZGVzKQ0KICBmb3IgKGkgaW4gMToobGVuZ3RoKGFtcGxpdHVkZXMpKSkgew0KICAgIHJlY29uc3RydWN0ZWRbW2ldXSA8LQ0KICAgICAgYW1wbGl0dWRlc1tpXSAqIGNvcygyICogcGkgKiBmcmVxdWVuY2llc1tpXSAqIHggKyBwaGFzZXNbaV0pIC8gbiAqIDINCiAgfQ0KICByZXR1cm4ocmVjb25zdHJ1Y3RlZCkNCn0NCg0KIyB5X21haW4gPC0geQ0KIyBYIDwtIGhhbmtlbCh5KQ0KIyBLIDwtIGRpbShYKVsyXQ0KIyByZXMgPC0gbGlzdCgpDQojIGZvciAoaSBpbiAxOkspew0KIyAgIHkgPC0gWFssIGldDQojICAgDQojICAgIyDQktGL0L/QvtC70L3Rj9C10Lwg0LHRi9GB0YLRgNC+0LUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDQpNGD0YDRjNC1DQojICAgZmZ0X3kgPC0gZmZ0KHkpDQojICAgDQojICAgIyDQn9C+0LvRg9GH0LDQtdC8INCw0LzQv9C70LjRgtGD0LTRiyDQuCDRhNCw0LfRiw0KIyAgIGFtcGxpdHVkZXMgPC0gTW9kKGZmdF95KQ0KIyAgIHBoYXNlcyA8LSBBcmcoZmZ0X3kpDQojICAgDQojICAgcmVzW1tpXV0gPC0gcmVjb25zdHJ1Y3RfZmZ0KGZyZXF1ZW5jaWVzLCBhbXBsaXR1ZGVzLCBwaGFzZXMpDQojIH0NCiMgDQojIG5mdCA8LSByZXNbWzFdXQ0KIyBwcmludChuZnQgfD4gbGVuZ3RoKCkpDQojIHJlc19mdWxsIDwtIG1hdHJpeCgwLCBucm93ID0gIHw+IGxlbmd0aCgpLCApDQojIA0KIyBmb3IgKGkgaW4gMTpLKXsNCiMgICByZXNfZnVsbCA8LSANCiMgfQ0KDQojIA0KIyANCnlfcmVjb25zdHJ1Y3RlZCA8LSByZWNvbnN0cnVjdF9mZnQoZnJlcXVlbmNpZXMsIGFtcGxpdHVkZXMsIHBoYXNlcykNCg0KIyDQodGC0YDQvtC40Lwg0LPRgNCw0YTQuNC60LgNCmZvciAoaSBpbiAxOihuKSl7DQogIHBsb3QoeCwgeV9yZWNvbnN0cnVjdGVkW1tpXV0sIG1haW4gPSBwYXN0ZShmcmVxdWVuY2llc1tpXSkpDQoNCn0NCg0KcGxvdCh4LCBSZWR1Y2UoIisiLCB5X3JlY29uc3RydWN0ZWQpLCB0eXBlID0gImwiKQ0KIyBsaW5lcyh4LCB5LCBjb2wgPSAicmVkIiwgdHlwZSA9ICJsIiwgbHR5ID0gMikNCmBgYA0KDQpgYGB7cn0NCg0KYGBgDQoNCmBgYHtyfQ0KeCA8LSAxOjEwMA0KeSA8LSBzaW4oMipwaSp4KQ0KZGZ0bXR4KDEwKVszLCAyXQ0KZGZ0bXR4KDEwKVsyLCAzXQ0KKGFzLm1hdHJpeChkZnRtdHgoMTApWzMsIF0pKSAlKiUgdChhcy5tYXRyaXgoQ29uaihkZnRtdHgoMTApWywgM10pKSkNCmRpbSggdChhcy5tYXRyaXgoQ29uaihkZnRtdHgoMTApWzMsIF0pKSkpDQpkaW0oYXMubWF0cml4KGRmdG10eCgxMClbMywgXSkpDQpgYGANCg0KYGBge3J9DQoNClggPC0gbWF0cml4KGMoMzIsIDIxLCAyMywNCiAgICAgICAgICAgNTIxLDYzMTQ1MiwgMjUyNTEsDQogICAgICAgICAgIDE1MzYsIDc1LCAzOCksIG5yb3c9IDMpDQpmX21hdCA8LSBkZnRtdHgoMykgLyBzcXJ0KDMpDQpmX21hdF9pbnYgPC0gQ29uaihmX21hdCkNClgNCmZfbWF0ICUqJSBmX21hdF9pbnYgJSolIFgNCmBgYA0KDQpgYGB7cn0NCmRhdGFfc2xpY2UgPC0gMTo1MzgNCm4gPC0gOTYqMg0KTCA8LSA5Ng0KDQp4IDwtIGRhdGFfc2xpY2UNCnkxIDwtIGNvcygyICogcGkgLyAxMiAqIHgpICAjINCf0LXRgNCy0LDRjyDQutC+0LzQv9C+0L3QtdC90YLQsA0KeTIgPC0gc2luKDIgKiBwaSAvIDQ4ICogeCkgICMg0JLRgtC+0YDQsNGPINC60L7QvNC/0L7QvdC10L3RgtCwDQoNCiMg0KHQvtC30LTQsNC10Lwg0L7QsdGJ0LjQuSDQstGA0LXQvNC10L3QvdC+0Lkg0YDRj9C0DQp5IDwtIElQX3ZhbHVlc1tkYXRhX3NsaWNlXQ0KeV9leHRlbmRlZCA8LSB5IHw+IGV4dGVuZChMKQ0KeCA8LSAxOmxlbmd0aCh5X2V4dGVuZGVkKQ0KeSA8LSBJUF92YWx1ZXNbZGF0YV9zbGljZV0NCg0KIyDQktGL0L/QvtC70L3Rj9C10Lwg0LHRi9GB0YLRgNC+0LUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDQpNGD0YDRjNC1DQpmZnRfeSA8LSBmZnQoeSkNCg0KIyDQn9C+0LvRg9GH0LDQtdC8INCw0LzQv9C70LjRgtGD0LTRiyDQuCDRhNCw0LfRiw0KYW1wbGl0dWRlcyA8LSBNb2QoZmZ0X3kpDQpwaGFzZXMgPC0gQXJnKGZmdF95KQ0KDQojINCY0L3QtNC10LrRgdGLINC00LvRjyDRh9Cw0YHRgtC+0YINCm4gPC0gbGVuZ3RoKHkpDQpmcmVxdWVuY2llcyA8LSAoMDoobi0xKSkgLyBuDQoNCiMg0KTRg9C90LrRhtC40Y8g0LTQu9GPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGCDQpyZWNvbnN0cnVjdF9mZnQgPC0gZnVuY3Rpb24oZnJlcXVlbmNpZXMsIGFtcGxpdHVkZXMsIHBoYXNlcykgew0KICByZWNvbnN0cnVjdGVkIDwtIGxpc3QoKQ0KICBuIDwtIGxlbmd0aChhbXBsaXR1ZGVzKQ0KICBmb3IgKGkgaW4gMToobGVuZ3RoKGFtcGxpdHVkZXMpKSkgew0KICAgIHJlY29uc3RydWN0ZWRbW2ldXSA8LQ0KICAgICAgYW1wbGl0dWRlc1tpXSAqIGNvcygyICogcGkgKiBmcmVxdWVuY2llc1tpXSAqIHggKyBwaGFzZXNbaV0pIC8gbiAqIDINCiAgfQ0KICByZXR1cm4ocmVjb25zdHJ1Y3RlZCkNCn0NCg0KeV9yZWNvbnN0cnVjdGVkIDwtIHJlY29uc3RydWN0X2ZmdChmcmVxdWVuY2llcywgYW1wbGl0dWRlcywgcGhhc2VzKQ0KDQojINCh0YLRgNC+0LjQvCDQs9GA0LDRhNC40LrQuA0KZm9yIChpIGluIDE6KG4pKXsNCiAgcGxvdCh4LCB5X3JlY29uc3RydWN0ZWRbW2ldXSwgbWFpbiA9IHBhc3RlKGZyZXF1ZW5jaWVzW2ldKSkNCiAgDQp9DQpgYGANCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQp4IDwtIHNpbigyKnBpLzUgKiAxOjIwKSArIGNvcygyKnBpLzIgKiAxOjIwKQ0KTCA8LSAxMA0KWCA8LSBoYW5rZWwoeCwgTCkNClgNCkZ0IDwtIGRmdG10eChMKSAvIHNxcnQoTCkNCkZ0X2ludiA8LSB0KENvbmooRnQpKQ0KIyBGdCUqJVhbLDQ6MTBdDQojIGRmdG10eCgyMCkgJSolIHQoQ29uaihkZnRtdHgoMjApKSkgJSolIGFzLm1hdHJpeCh4LCBucm93ID0gMSkgLyBsZW5ndGgoeCkNCiMgDQojIHQoQ29uaihkZnRtdHgoMjApKSkgJSolIGFzLm1hdHJpeCh4LCBucm93ID0gMSkNCg0KDQoNCiMgRnQgJSolICAoRnRfaW52ICUqJSBYIHw+IGRpYWdfYXZlcmFnaW5nKCkpDQpGdCAlKiUgKEZ0X2ludiAlKiUgWFssNToxMV0gfD4gYXBwbHkoMSwgbWVhbikgfD4gdW5saXN0KCkpDQoNCmRzYWZhZHMgPC0gZnVuY3Rpb24oaW5kZXhfYmVnKXsNCiAgRnQgJSolIChGdF9pbnYgJSolIFhbLCBpbmRleF9iZWc6KGluZGV4X2JlZyArIGRpbShYKVsxXSAtIDEpXSB8PiB1bmxpc3QoKSkNCn0NCg0KbGFwcGx5KDE6KGRpbShYKVsyXSAtIGRpbShYKVsxXSksIGRzYWZhZHMpDQoNCkZ0X2ludiAlKiUgWCANCmBgYA0KDQpgYGB7cn0NCkZ0X2ludl9YIDwtIEZ0X2ludiAlKiUgWA0KZjEgPC0gZnVuY3Rpb24oaW5kZXhfYmVnKXsNCiAgRnQgJSolIEZ0X2ludl9YWywgaW5kZXhfYmVnOihpbmRleF9iZWcgKyBkaW0oWClbMV0gLSAxKV0gfD4gdW5saXN0KCkNCn0NCg0KDQoNCg0KYGBgDQoNCmBgYHtyfQ0KRnRfX2ludl9jb21wb25lbnRfd2lzZSA8LSBzd2VlcChGdF9pbnYsIDEsIFhbLCAyXSwgJyonKQ0KRl90X2NvbXBvc2UgPC0gRnQgJSolIEZ0X19pbnZfY29tcG9uZW50X3dpc2UNCkZfdF9jb21wb3NlDQpmb3IgKGkgaW4gMTpMKSB7DQogIHBsb3QoMTpMLCBGX3RfY29tcG9zZVssIGldKQ0KfQ0KDQpzdW0oRl90X2NvbXBvc2VbLDNdKQ0KeFsyXQ0KYGBgDQoNCiMjIyBDaVNTQSDRh9C10YDQtdC3INCk0YPRgNGM0LUNCg0KYGBge3J9DQojIG4gPC0gOTYqMi0xDQojIHggPC0gMDoobi0xKQ0KIyBMIDwtIDk2DQojIHkgPC0gc2luKDIqcGkvMTIgKiB4KQ0KIyANCiMgWCA8LSBoYW5rZWwoeSwgTCkNCiMgDQojIEZ0IDwtIGRmdG10eChMKSAvIHNxcnQoTCkNCiMgRnRfaW52IDwtIHQoQ29uaihGdCkpDQojIA0KIyBjb21wb25lbnRfd2lzZV9tdWx0IDwtIGZ1bmN0aW9uKGluZGV4KXsNCiMgICBGdCAlKiUgdChzd2VlcChGdF9pbnYsIDEsIFhbLCBpbmRleF0sICcqJykpDQojIH0NCiMgDQojIA0KIyBhdmVyYWdpbmcgPC0gZnVuY3Rpb24ocmVzX2NvbXBfd2lzZV9tdWx0KXsNCiMgICBLIDwtIGRpbShYKVsyXQ0KIyAgIGNvdW50ZXJzIDwtIHJlcCgwLCBuKQ0KIyAgIHJlcyA8LSBtYXRyaXgoMCwgbnJvdyA9IG4sIG5jb2wgPSBMKQ0KIyAgIGZvciAoaSBpbiAxOkspew0KIyAgICAgcmVzW2k6KGkrTC0xKSwgXSA8LSByZXNbaTooaStMLTEpLCBdICsgcmVzX2NvbXBfd2lzZV9tdWx0W1tpXV0NCiMgICAgIGNvdW50ZXJzW2k6KGkrTC0xKV0gPC0gY291bnRlcnNbaTooaStMLTEpXSArIDENCiMgICB9DQojICAgZm9yIChpIGluIDE6bil7DQojICAgICByZXNbaSwgXSA8LSByZXNbaSwgXSAvIGNvdW50ZXJzW2ldDQojICAgfQ0KIyAgIHJlcw0KIyB9DQojIA0KIyANCiMgcmVzX2NvbXBfd2lzZSA8LSBsYXBwbHkoMTpMLCBjb21wb25lbnRfd2lzZV9tdWx0KQ0KIyBwcmludChyZXNfY29tcF93aXNlW1sxXV0pDQojIA0KIyANCiMgcGxvdCgxOkwsIHJlc19jb21wX3dpc2VbWzFdXVssIDJdKQ0KIyANCiMgYXZyIDwtIGF2ZXJhZ2luZyhyZXNfY29tcF93aXNlKQ0KIyANCiMgZm9yIChpIGluIDE6ZGltKHJlcyR0X3NlcmllcylbMl0pew0KIyAgIHBsb3QoeCwgYXZyW2ksIF0pDQojIH0NCiMgDQojICMgcGxvdCh4LCByb3dTdW1zKGF2cikpDQojIA0KIyBncm91cF9ieV9lbGVtZW50YXJ5X2ZyZXFfZm91cmVpciA8LSBmdW5jdGlvbihyZXNfYXZlcmFnZWQpew0KIyAgIG5mMiA8LSAwDQojICAgaWYgKEwgJSUgMikgew0KIyAgICAgbmYyIDwtIChMICsgMSkgLyAyIC0gMQ0KIyAgIH0gZWxzZSB7DQojICAgICBuZjIgPC0gTCAvIDIgLSAxDQojICAgfQ0KIyAgIG5mdCA8LSBuZjIgKyBhYnMoKEwgJSUgMikgLSAyKQ0KIyAgIA0KIyAgIFogPC0gbWF0cml4KDAsIG5jb2wgPSBuZnQsIG5yb3cgPSBuKQ0KIyAgIA0KIyAgICMgcHJpbnQoWiB8PiBkaW0oKSkNCiMgICAjIHByaW50KHJlc19hdmVyYWdlZCB8PiBkaW0oKSkNCiMgICANCiMgICBaWywgMV0gPC0gcmVzX2F2ZXJhZ2VkWywgMV0NCiMgICBmb3IgKGsgaW4gMTpuZjIpIHsNCiMgICAgIFpbLCBrICsgMV0gPC0gcmVzX2F2ZXJhZ2VkWywgayArIDFdICsgcmVzX2F2ZXJhZ2VkWywgTCArIDIgLSAoayArIDEpXQ0KIyAgIH0NCiMgICBpZiAoTCAlJSAyICE9IDApIHsNCiMgICAgIFpbLCBuZnRdIDwtIHJlc19hdmVyYWdlZFssIG5mdF0NCiMgICB9DQojICAgDQojICAgDQojICAgcmV0dXJuKGxpc3QoDQojICAgICB0X3NlcmllcyA9IFosDQojICAgICBmcmVxID0gKDA6ZGltKFopWzJdKS9MDQojICAgKSkNCiMgfQ0KIyANCiMgcmVzIDwtIGdyb3VwX2J5X2VsZW1lbnRhcnlfZnJlcV9mb3VyZWlyKGF2cikNCiMgDQojICMgcHJpbnQocmVzJHRfc2VyaWVzIHw+IGNvbFN1bXMoKSB8PiBsZW5ndGgoKSkNCiMgIyBwcmludCh4IHw+IGxlbmd0aCgpKQ0KIyANCiMgIyBwbG90KHgsIHJvd1N1bXMocmVzJHRfc2VyaWVzKSApDQojICMgcGxvdCh4LCB5KQ0KIyANCiMgdF9zZXJpZXMgPC0gcmVzJHRfc2VyaWVzDQojIA0KIyBwbG90KHgsIHRfc2VyaWVzWywgMV0pDQojIA0KIyBmb3IgKGkgaW4gMTpkaW0ocmVzJHRfc2VyaWVzKVsyXSl7DQojICAgcGxvdCh4LCByZXMkdF9zZXJpZXNbLCBpXSkNCiMgfQ0KDQpgYGANCg0KYGBge3J9DQojIEZ0ICUqJSBzd2VlcChGdF9pbnYsIDEsIFhbLCAxXSwgJyonKVsyLCBdDQpgYGANCg0KYGBge3J9DQpyZWNvbnN0cnVjdF9mZnQgPC0gZnVuY3Rpb24oeCwgeSwgZnJlcXVlbmNpZXMpIHsNCiAgIyDQktGL0L/QvtC70L3Rj9C10Lwg0LHRi9GB0YLRgNC+0LUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDQpNGD0YDRjNC1DQogIGZmdF95IDwtIGZmdCh5KQ0KDQogICMg0J/QvtC70YPRh9Cw0LXQvCDQsNC80L/Qu9C40YLRg9C00Ysg0Lgg0YTQsNC30YsNCiAgYW1wbGl0dWRlcyA8LSBNb2QoZmZ0X3kpDQogIHBoYXNlcyA8LSBBcmcoZmZ0X3kpDQogIA0KICByZWNvbnN0cnVjdGVkIDwtIG1hdHJpeCgwLCBsZW5ndGgoYW1wbGl0dWRlcyksIGxlbmd0aCh4KSkNCiAgbiA8LSBsZW5ndGgoYW1wbGl0dWRlcykNCiAgZm9yIChpIGluIDE6KGxlbmd0aChhbXBsaXR1ZGVzKSkpIHsNCiAgICAjIHByaW50KGkpDQogICAgcmVjb25zdHJ1Y3RlZFtpLCBdIDwtDQogICAgICBhbXBsaXR1ZGVzW2ldICogDQogICAgICBjb3MoMiAqIHBpICogZnJlcXVlbmNpZXNbaV0gKiAoeCkgKyBwaGFzZXNbaV0pIC8NCiAgICAgIG4NCiAgfQ0KICAjIHBsb3QoeCwgcmVjb25zdHJ1Y3RlZFs5LCBdLCBtYWluID0gcGFzdGUoeFsxXSksIHR5cGUgPSAibCIsIGNvbCA9ICJyZWQiKQ0KICAjIGxpbmVzKHgsIHkvMikNCiAgIyBwbG90KHgsIHJlY29uc3RydWN0ZWRbTCsyLTksIF0sIG1haW4gPSBwYXN0ZSh4WzFdKSkNCiAgcmV0dXJuKHJlY29uc3RydWN0ZWQpDQp9DQoNCg0KbiA8LSA5NioyLTENCnggPC0gMDoobi0xKQ0KTCA8LSA0OA0KZnJlcXVlbmNpZXMgPC0gKDA6KEwtMSkpIC8gTA0KeSA8LSBzaW4oMipwaS8xMiAqIHgpDQp5X21haW4gPC0geQ0KeF9tYWluIDwtIHgNCg0KWCA8LSBoYW5rZWwoeSwgTCkNCksgPC0gZGltKFgpWzJdDQpyZXMgPC0gbGlzdCgpDQpmb3IgKGkgaW4gMTpLKXsNCiAgeSA8LSBYWywgaV0NCiAgeCA8LSB4X21haW5bMTooMSArIEwgLSAxKV0NCiAgcmVzW1tpXV0gPC0gcmVjb25zdHJ1Y3RfZmZ0KHgsIHksIGZyZXF1ZW5jaWVzKQ0KfQ0KDQojIGZvciAoaSBpbiAxOkwpew0KIyAgIHBsb3QoeCwgcmVzW1tpXV1bOSwgXSkNCiMgfQ0KDQpyZXNfbXVsdCA8LSByZXMNCiMgcmVzDQoNCmF2ZXJhZ2luZyA8LSBmdW5jdGlvbihyZXNfY29tcF93aXNlX211bHQpew0KICBLIDwtIGRpbShYKVsyXQ0KICBjb3VudGVycyA8LSByZXAoMCwgbikNCiAgcmVzIDwtIG1hdHJpeCgwLCBuY29sID0gbiwgbnJvdyA9IEwpDQogIGZvciAoaSBpbiAxOmxlbmd0aChyZXNfY29tcF93aXNlX211bHQpKXsNCiAgICByZXNbLCBpOihpK0wtMSldIDwtIHJlc1ssIGk6KGkrTC0xKV0gKyByZXNfY29tcF93aXNlX211bHRbW2ldXQ0KICAgIGNvdW50ZXJzW2k6KGkrTC0xKV0gPC0gY291bnRlcnNbaTooaStMLTEpXSArIDENCiAgfQ0KICBmb3IgKGkgaW4gMTpuKXsNCiAgICByZXNbLCBpXSA8LSByZXNbLCBpXSAvIGNvdW50ZXJzW2ldDQogIH0NCiAgcmVzDQp9DQoNCmF2ciA8LSBhdmVyYWdpbmcocmVzX211bHQpDQoNCmdyb3VwX2J5X2VsZW1lbnRhcnlfZnJlcV9mb3VyZWlyIDwtIGZ1bmN0aW9uKHJlc19hdmVyYWdlZCl7DQogIG5mMiA8LSAwDQogIGlmIChMICUlIDIpIHsNCiAgICBuZjIgPC0gKEwgKyAxKSAvIDIgLSAxDQogIH0gZWxzZSB7DQogICAgbmYyIDwtIEwgLyAyIC0gMQ0KICB9DQogIG5mdCA8LSBuZjIgKyBhYnMoKEwgJSUgMikgLSAyKQ0KICANCiAgWiA8LSBtYXRyaXgoMCwgbmNvbCA9IG5mdCwgbnJvdyA9IG4pDQogIA0KICAjIHByaW50KFogfD4gZGltKCkpDQogICMgcHJpbnQocmVzX2F2ZXJhZ2VkIHw+IGRpbSgpKQ0KICANCiAgWlssIDFdIDwtIHJlc19hdmVyYWdlZFsxLCBdDQogIGZvciAoayBpbiAxOm5mMikgew0KICAgIFpbLCBrICsgMV0gPC0gcmVzX2F2ZXJhZ2VkW2sgKyAxLCBdICsgcmVzX2F2ZXJhZ2VkW0wgKyAyIC0gKGsgKyAxKSwgXQ0KICB9DQogIGlmIChMICUlIDIgIT0gMCkgew0KICAgIFpbLCBuZnRdIDwtIHJlc19hdmVyYWdlZFtuZnQsIF0NCiAgfQ0KICANCiAgDQogIHJldHVybihsaXN0KA0KICAgIHRfc2VyaWVzID0gWiwNCiAgICBmcmVxID0gKDA6ZGltKFopWzJdKS9MDQogICkpDQp9DQoNCg0KcnMgPC0gZ3JvdXBfYnlfZWxlbWVudGFyeV9mcmVxX2ZvdXJlaXIoYXZyKQ0KDQpwbG90KHhfbWFpbiwgcnMkdF9zZXJpZXNbLCA1XSkNCg0KYGBgDQoNCiMjIyMgSVBfdmFsdWVzDQoNCmBgYHtyfQ0KZGF0YV9zbGljZSA8LSAxOjUzNw0KZGF0ZXNfc2xpY2UgPC0gZGF0ZXNbZGF0YV9zbGljZV0NCklQX3ZhbHVlc19zbGljZSA8LSBJUF92YWx1ZXNbZGF0YV9zbGljZV0NCmVwcyA8LSAxLzE5Mw0KDQoNCmMgPC0gY2lyY3VsYW50X1NTQShJUF92YWx1ZXNfc2xpY2UsIEwgPSAxOTIsIGV4dGVuZF9mbGFnID0gRkFMU0UpDQpyIDwtIGMkdF9zZXJpZXMNCg0KDQoNCg0KDQoNCnJlY29uc3RydWN0X2ZmdCA8LSBmdW5jdGlvbih4LCB5LCBmcmVxdWVuY2llcykgew0KICAjINCS0YvQv9C+0LvQvdGP0LXQvCDQsdGL0YHRgtGA0L7QtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1INCk0YPRgNGM0LUNCiAgZmZ0X3kgPC0gZmZ0KHkpDQoNCiAgIyDQn9C+0LvRg9GH0LDQtdC8INCw0LzQv9C70LjRgtGD0LTRiyDQuCDRhNCw0LfRiw0KICBhbXBsaXR1ZGVzIDwtIE1vZChmZnRfeSkNCiAgcGhhc2VzIDwtIEFyZyhmZnRfeSkNCiAgDQogIHJlY29uc3RydWN0ZWQgPC0gbWF0cml4KDAsIGxlbmd0aChhbXBsaXR1ZGVzKSwgbGVuZ3RoKHgpKQ0KICBuIDwtIGxlbmd0aChhbXBsaXR1ZGVzKQ0KICBmb3IgKGkgaW4gMToobGVuZ3RoKGFtcGxpdHVkZXMpKSkgew0KICAgICMgcHJpbnQoaSkNCiAgICByZWNvbnN0cnVjdGVkW2ksIF0gPC0NCiAgICAgIGFtcGxpdHVkZXNbaV0gKiANCiAgICAgIGNvcygyICogcGkgKiBmcmVxdWVuY2llc1tpXSAqICh4KSArIHBoYXNlc1tpXSkgLw0KICAgICAgbg0KICB9DQogICMgcGxvdCh4LCByZWNvbnN0cnVjdGVkWzksIF0sIG1haW4gPSBwYXN0ZSh4WzFdKSwgdHlwZSA9ICJsIiwgY29sID0gInJlZCIpDQogICMgbGluZXMoeCwgeS8yKQ0KICAjIHBsb3QoeCwgcmVjb25zdHJ1Y3RlZFtMKzItOSwgXSwgbWFpbiA9IHBhc3RlKHhbMV0pKQ0KICByZXR1cm4ocmVjb25zdHJ1Y3RlZCkNCn0NCg0KDQpuIDwtIDUzNw0KeCA8LSAwOihuLTEpDQpMIDwtIDE5Mg0KZnJlcXVlbmNpZXMgPC0gKDA6KEwtMSkpIC8gTA0KeSA8LSBJUF92YWx1ZXNfc2xpY2UNCnlfbWFpbiA8LSB5DQp4X21haW4gPC0geA0KDQpYIDwtIGhhbmtlbCh5LCBMKQ0KSyA8LSBkaW0oWClbMl0NCnJlcyA8LSBsaXN0KCkNCmZvciAoaSBpbiAxOkspew0KICB5IDwtIFhbLCBpXQ0KICB4IDwtIHhfbWFpblsxOigxICsgTCAtIDEpXQ0KICByZXNbW2ldXSA8LSByZWNvbnN0cnVjdF9mZnQoeCwgeSwgZnJlcXVlbmNpZXMpDQp9DQoNCiMgZm9yIChpIGluIDE6TCl7DQojICAgcGxvdCh4LCByZXNbW2ldXVs5LCBdKQ0KIyB9DQoNCnJlc19tdWx0IDwtIHJlcw0KIyByZXMNCg0KYXZlcmFnaW5nIDwtIGZ1bmN0aW9uKHJlc19jb21wX3dpc2VfbXVsdCl7DQogIEsgPC0gZGltKFgpWzJdDQogIGNvdW50ZXJzIDwtIHJlcCgwLCBuKQ0KICByZXMgPC0gbWF0cml4KDAsIG5jb2wgPSBuLCBucm93ID0gTCkNCiAgZm9yIChpIGluIDE6bGVuZ3RoKHJlc19jb21wX3dpc2VfbXVsdCkpew0KICAgIHJlc1ssIGk6KGkrTC0xKV0gPC0gcmVzWywgaTooaStMLTEpXSArIHJlc19jb21wX3dpc2VfbXVsdFtbaV1dDQogICAgY291bnRlcnNbaTooaStMLTEpXSA8LSBjb3VudGVyc1tpOihpK0wtMSldICsgMQ0KICB9DQogIGZvciAoaSBpbiAxOm4pew0KICAgIHJlc1ssIGldIDwtIHJlc1ssIGldIC8gY291bnRlcnNbaV0NCiAgfQ0KICByZXMNCn0NCg0KYXZyIDwtIGF2ZXJhZ2luZyhyZXNfbXVsdCkNCg0KZ3JvdXBfYnlfZWxlbWVudGFyeV9mcmVxX2ZvdXJlaXIgPC0gZnVuY3Rpb24ocmVzX2F2ZXJhZ2VkKXsNCiAgbmYyIDwtIDANCiAgaWYgKEwgJSUgMikgew0KICAgIG5mMiA8LSAoTCArIDEpIC8gMiAtIDENCiAgfSBlbHNlIHsNCiAgICBuZjIgPC0gTCAvIDIgLSAxDQogIH0NCiAgbmZ0IDwtIG5mMiArIGFicygoTCAlJSAyKSAtIDIpDQogIA0KICBaIDwtIG1hdHJpeCgwLCBuY29sID0gbmZ0LCBucm93ID0gbikNCiAgDQogICMgcHJpbnQoWiB8PiBkaW0oKSkNCiAgIyBwcmludChyZXNfYXZlcmFnZWQgfD4gZGltKCkpDQogIA0KICBaWywgMV0gPC0gcmVzX2F2ZXJhZ2VkWzEsIF0NCiAgZm9yIChrIGluIDE6bmYyKSB7DQogICAgWlssIGsgKyAxXSA8LSByZXNfYXZlcmFnZWRbayArIDEsIF0gKyByZXNfYXZlcmFnZWRbTCArIDIgLSAoayArIDEpLCBdDQogIH0NCiAgaWYgKEwgJSUgMiAhPSAwKSB7DQogICAgWlssIG5mdF0gPC0gcmVzX2F2ZXJhZ2VkW25mdCwgXQ0KICB9DQogIA0KICANCiAgcmV0dXJuKGxpc3QoDQogICAgdF9zZXJpZXMgPSBaLA0KICAgIGZyZXEgPSAoMDpkaW0oWilbMl0pL0wNCiAgKSkNCn0NCg0KDQpycyA8LSBncm91cF9ieV9lbGVtZW50YXJ5X2ZyZXFfZm91cmVpcihhdnIpDQoNCiMgcGxvdCh4X21haW4sIHJzJHRfc2VyaWVzWywgNV0pDQoNCg0KZm9yIChpIGluIDE6ZGltKHIpWzJdKXsNCiAgcGxvdCgxOm4sIHJzJHRfc2VyaWVzWywgaV0sIGNvbD0gInJlZCIsIHR5cGUgPSAibCIpDQogIGxpbmVzKDE6biwgclssIGldKQ0KfQ0KDQoNCmBgYA0KDQpgYGB7cn0NCmNpc3NhX2xpa2VfZm91cmllcl90cmFuc2Zvcm0gPC0gZnVuY3Rpb24odHMsIEwpew0KICByZWNvbnN0cnVjdF9mZnQgPC0gZnVuY3Rpb24oeCwgeSwgZnJlcXVlbmNpZXMpIHsNCiAgICAjINCS0YvQv9C+0LvQvdGP0LXQvCDQsdGL0YHRgtGA0L7QtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1INCk0YPRgNGM0LUNCiAgICBmZnRfeSA8LSBmZnQoeSkNCiAgDQogICAgIyDQn9C+0LvRg9GH0LDQtdC8INCw0LzQv9C70LjRgtGD0LTRiyDQuCDRhNCw0LfRiw0KICAgIGFtcGxpdHVkZXMgPC0gTW9kKGZmdF95KQ0KICAgIHBoYXNlcyA8LSBBcmcoZmZ0X3kpDQogICAgDQogICAgcmVjb25zdHJ1Y3RlZCA8LSBtYXRyaXgoMCwgbGVuZ3RoKGFtcGxpdHVkZXMpLCBsZW5ndGgoeCkpDQogICAgbiA8LSBsZW5ndGgoYW1wbGl0dWRlcykNCiAgICBmb3IgKGkgaW4gMToobGVuZ3RoKGFtcGxpdHVkZXMpKSkgew0KICAgICAgIyBwcmludChpKQ0KICAgICAgcmVjb25zdHJ1Y3RlZFtpLCBdIDwtDQogICAgICAgIGFtcGxpdHVkZXNbaV0gKiANCiAgICAgICAgY29zKDIgKiBwaSAqIGZyZXF1ZW5jaWVzW2ldICogKHgpICsgcGhhc2VzW2ldKSAvDQogICAgICAgIG4NCiAgICB9DQogICAgIyBwbG90KHgsIHJlY29uc3RydWN0ZWRbOSwgXSwgbWFpbiA9IHBhc3RlKHhbMV0pLCB0eXBlID0gImwiLCBjb2wgPSAicmVkIikNCiAgICAjIGxpbmVzKHgsIHkvMikNCiAgICAjIHBsb3QoeCwgcmVjb25zdHJ1Y3RlZFtMKzItOSwgXSwgbWFpbiA9IHBhc3RlKHhbMV0pKQ0KICAgIHJldHVybihyZWNvbnN0cnVjdGVkKQ0KICB9DQogIA0KICANCiAgbiA8LSBsZW5ndGgodHMpDQogIHggPC0gMDoobi0xKQ0KICBMIDwtIEwNCiAgZnJlcXVlbmNpZXMgPC0gKDA6KEwtMSkpIC8gTA0KICB5IDwtIHRzDQogIHlfbWFpbiA8LSB5DQogIHhfbWFpbiA8LSB4DQogIA0KICBYIDwtIGhhbmtlbCh5LCBMKQ0KICBLIDwtIGRpbShYKVsyXQ0KICByZXMgPC0gbGlzdCgpDQogIGZvciAoaSBpbiAxOkspew0KICAgIHkgPC0gWFssIGldDQogICAgeCA8LSB4X21haW5bMTooMSArIEwgLSAxKV0NCiAgICByZXNbW2ldXSA8LSByZWNvbnN0cnVjdF9mZnQoeCwgeSwgZnJlcXVlbmNpZXMpDQogIH0NCiAgDQogICMgZm9yIChpIGluIDE6TCl7DQogICMgICBwbG90KHgsIHJlc1tbaV1dWzksIF0pDQogICMgfQ0KICANCiAgcmVzX211bHQgPC0gcmVzDQogICMgcmVzDQogIA0KICBhdmVyYWdpbmcgPC0gZnVuY3Rpb24ocmVzX2NvbXBfd2lzZV9tdWx0KXsNCiAgICBLIDwtIGRpbShYKVsyXQ0KICAgIGNvdW50ZXJzIDwtIHJlcCgwLCBuKQ0KICAgIHJlcyA8LSBtYXRyaXgoMCwgbmNvbCA9IG4sIG5yb3cgPSBMKQ0KICAgIGZvciAoaSBpbiAxOmxlbmd0aChyZXNfY29tcF93aXNlX211bHQpKXsNCiAgICAgIHJlc1ssIGk6KGkrTC0xKV0gPC0gcmVzWywgaTooaStMLTEpXSArIHJlc19jb21wX3dpc2VfbXVsdFtbaV1dDQogICAgICBjb3VudGVyc1tpOihpK0wtMSldIDwtIGNvdW50ZXJzW2k6KGkrTC0xKV0gKyAxDQogICAgfQ0KICAgIGZvciAoaSBpbiAxOm4pew0KICAgICAgcmVzWywgaV0gPC0gcmVzWywgaV0gLyBjb3VudGVyc1tpXQ0KICAgIH0NCiAgICByZXMNCiAgfQ0KICANCiAgYXZyIDwtIGF2ZXJhZ2luZyhyZXNfbXVsdCkNCiAgDQogIGdyb3VwX2J5X2VsZW1lbnRhcnlfZnJlcV9mb3VyZWlyIDwtIGZ1bmN0aW9uKHJlc19hdmVyYWdlZCl7DQogICAgbmYyIDwtIDANCiAgICBpZiAoTCAlJSAyKSB7DQogICAgICBuZjIgPC0gKEwgKyAxKSAvIDIgLSAxDQogICAgfSBlbHNlIHsNCiAgICAgIG5mMiA8LSBMIC8gMiAtIDENCiAgICB9DQogICAgbmZ0IDwtIG5mMiArIGFicygoTCAlJSAyKSAtIDIpDQogICAgDQogICAgWiA8LSBtYXRyaXgoMCwgbmNvbCA9IG5mdCwgbnJvdyA9IG4pDQogICAgDQogICAgIyBwcmludChaIHw+IGRpbSgpKQ0KICAgICMgcHJpbnQocmVzX2F2ZXJhZ2VkIHw+IGRpbSgpKQ0KICAgIA0KICAgIFpbLCAxXSA8LSByZXNfYXZlcmFnZWRbMSwgXQ0KICAgIGZvciAoayBpbiAxOm5mMikgew0KICAgICAgWlssIGsgKyAxXSA8LSByZXNfYXZlcmFnZWRbayArIDEsIF0gKyByZXNfYXZlcmFnZWRbTCArIDIgLSAoayArIDEpLCBdDQogICAgfQ0KICAgIGlmIChMICUlIDIgIT0gMCkgew0KICAgICAgWlssIG5mdF0gPC0gcmVzX2F2ZXJhZ2VkW25mdCwgXQ0KICAgIH0NCiAgICANCiAgICANCiAgICByZXR1cm4obGlzdCgNCiAgICAgIHRfc2VyaWVzID0gWiwNCiAgICAgIGZyZXEgPSAoMDpkaW0oWilbMl0pL0wNCiAgICApKQ0KICB9DQoNCg0KICBycyA8LSBncm91cF9ieV9lbGVtZW50YXJ5X2ZyZXFfZm91cmVpcihhdnIpDQogIHJldHVybihycykNCn0NCg0KYGBgDQoNCmBgYHtyfQ0KZGF0YV9zbGljZSA8LSAxOjUzNw0KZGF0ZXNfc2xpY2UgPC0gZGF0ZXNbZGF0YV9zbGljZV0NCklQX3ZhbHVlc19zbGljZSA8LSBJUF92YWx1ZXNbZGF0YV9zbGljZV0NCmVwcyA8LSAxLzE5Mw0KDQoNCmMgPC0gY2lyY3VsYW50X1NTQShJUF92YWx1ZXNfc2xpY2UsIEwgPSAxOTIsIGV4dGVuZF9mbGFnID0gRkFMU0UpDQpyIDwtIGMkdF9zZXJpZXMNCg0KY19mdCA8LSBjaXNzYV9saWtlX2ZvdXJpZXJfdHJhbnNmb3JtKElQX3ZhbHVlc19zbGljZSwgTCA9IDE5MikNCnJfZnQgPC0gY19mdCR0X3Nlcmllcw0KDQoNCmZvciAoaSBpbiAxOmRpbShyKVsyXSl7DQogIHBsb3QoMTpuLCByX2Z0WywgaV0sIGNvbD0gInJlZCIsIHR5cGUgPSAibCIsIGx3ZCA9IDIpDQogIGxpbmVzKDE6biwgclssIGldKQ0KfQ0KYGBgDQo=